Pass Paint Переменная к Bashscript, которое вызывается изнутри Make

Должен ли я перенести скрипты в формат systemd?

Да.

Вас укусил известный недостаток в скриптах System 5 rc. На самом деле это не имеет никакого отношения к systemd. Вы могли бы попасть под дефект, если бы вам удалось запустить скрипты параллельно каким-то другим способом, например, с помощью startpar.

Хорошо известно, что поиск по выводам ps подвержен гонкам, как против grep, так и против текущего состояния системы, и можно найти десятилетия людей, сообщающих о попадании в эти же ошибки снова и снова с разными сценариями оболочки. Это глупо и ошибочно, и упоминается в разделе "BUGS" на странице руководства BSD для ps. Мир уже должен знать лучше.

Мир действительно знает лучше, и уже давно. У нас есть менеджеры служб, которые работают должным образом, без всех этих навороченных механизмов, включающих поиск по списку процессов и файлы, которые могут содержать или не содержать нужный номер, с начала 1990-х годов. Вам следует определенно, если вы столкнулись с этим и другими условиями гонки, выбросить эти шаткие, подверженные сбоям, идиосинкратические и грязные скрипты System 5 rc и использовать правильное управление службами. Никаких "если", никаких "но", никаких "быстрых обходных путей", которые вы уже используете (лишние grepы сами по себе являются обходными путями).

Существует множество таких сервис-менеджеров. Вы не обязаны использовать systemd. Различные сценарии, которые можно написать для runit, nosh или perp, так же просты, как и файлы модулей, которые можно написать для systemd.

В способах работы nosh и systemd нет двух основных служб, проверяющих и запускающих второстепенную. Это работа системы управления службами. Скорее вы просто объявляете зависимость от двух первичных сервисов для вторичного, так что система управления сервисами знает, что когда ей говорят запустить Agentdaemon.service и Securitydaemon.service, она должна запустить и common.service. В блоках служб systemd это будет параметр Requires= или Wants=.

Дальнейшее чтение

0
14.09.2018, 21:17
1 ответ

Вам нужно экспортировать имя переменной, а не значение.

Вы можете либо экспортировать имя для всех подпроцессов с помощью инструкции GNU Make export

export TargetLocation

Если вы хотите получить значение только для одного правила, ваш оператор должен иметь обычный синтаксис оболочки

    export TargetLocation="$(TargetLocation)"; \
   ./EditHtml.sh

В этом случае, в зависимости от содержимого переменной, могут потребоваться кавычки, и она по-прежнему будет уязвима, если для переменной могут быть произвольные значения. С другой стороны, если make запускается с привилегиями вызывающего пользователя, дополнительной опасности нет.

1
28.01.2020, 02:42

Теги

Похожие вопросы