Почему использование 'колотит-c' в супервизоре вместо сценария выполнения вызова непосредственно?

Я начинаю использовать supervisord к контрольным службам в моем сервере. Я не про пользователь Linux, но могу добраться с ним вполне хорошо и получить его выполнение.

Только из любопытства, я заметил, что как большинство команд в supervisord, кажется, называют:

[program:install]
command=bash -c "/src/etc/install.sh"

Я считал человека удара и знаю это -c должен использоваться для вставки переменных, переданных после строки.

Таким образом какой смысл использования bash -c в супервизоре (или какое-либо другое место) вместо того, чтобы назвать сценарий непосредственно (как пример ниже), полагая, что никакие переменные, куда передавал/использовал?

[program:install]
command=/src/etc/install.sh

Спасибо!

11
задан 15 September 2015 в 00:33
2 ответа

Особенности оболочки, такие как расширение имени (*, ? ), списки команд (;, &&, ||), перенаправление (<, >, |) не реализованы супервизором, который только разбивает команду на массив строк аргументов.

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

command=echo foo > /tmp/bar

выводит foo > /tmp/bar вместо записи foo в /tmp/bar.

-c имеет мало общего с переменными. Любые дополнительные аргументы к bash будут доступны только в виде аргументов скрипта $0, $1 и т.д. в команде, но эта возможность редко используется. Например bash -c 'echo $0 $0' foo выводит foo foo.

.
11
ответ дан 2 December 2019 в 21:48

Это объясняется в документации:

Ни одна оболочка не выполняется супервизором при запуске подпроцесса, поэтому переменные окружения, такие как USER, PATH, HOME, SHELL, LOGNAME и т.д. не изменяются по умолчанию и не переназначаются каким-либо другим образом. Это особенно важно, когда вы запускаете программу от супервизора, запущенную от имени root с параметром user= stanza в конфигурации.

Для обойти эту проблему можно использовать bash -c.

.
6
ответ дан 2 December 2019 в 21:48

Теги

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