Как я могу остановить процессы Supervisor (систему управления процессами) из сценария PHP, которым управляет Supervisor? - PullRequest
1 голос
/ 10 января 2012

Я распараллеливаю скрипт PHP, используя Supervisor .Когда мой сценарий получает определенный ответ из базы данных, он выполняет команду, чтобы остановить все процессы, контролируемые демоном Supervisord, с помощью supervisorctl.Вот команда:

// gracefully stop all processes in supervisor's group called processes
$cmd = 'sudo /usr/bin/supervisorctl stop processes:*';
exec( $cmd, $outputs );

Проблема в том, что эта команда, похоже, не оказывает влияния, когда запускается изнутри PHP-скрипта под контролем Supervisor.Почему?

Если я запускаю эту группу процессов, запущенных в Supervisor, а затем запускаю другой экземпляр сценария непосредственно из командной строки, он работает, и все процессы Supervisor останавливаются.

Чтопроисходит?Могут ли демонизированные PHP-скрипты не exec() команды оболочки?

1 Ответ

5 голосов
/ 10 января 2012

Я проверил файлы журналов Supervisor и обнаружил сообщение об ошибке «извините, у вас должен быть tty для запуска sudo».Насколько я понимаю, это происходит потому, что Supervisor демонизировал мои PHP-скрипты.Из-за безопасности Linux я не могу вызывать команды с помощью sudo в рамках демонизированного процесса.

Решением было запустить Supervisor в качестве текущего пользователя, что по умолчанию выполняется, если вы не выполняете его с помощьюкоманда sudo, как я делал (sudo /usr/bin/supervisord).Я делал это, потому что у моих сценариев не было всего доступа, который им был необходим для запуска (я полагаю, я давно ленился, когда настраивал свой процесс).

После исправления этого я мог запустить Supervisor без использованиякоманда sudo (/usr/bin/supervidord), а затем мне не нужно было выполнять supervisorctl (/usr/bin/supervisorctl) с sudo для управления им, что решает основную проблему невозможности вызова sudo из процесса daeomonized.

...