У меня есть несколько процессов php, которые я запускаю в фоновом режиме, с monit в качестве менеджера для них. Моя текущая конфигурация для monit выглядит так:
check process myprocess1
matching "process1.php"
start program = "/usr/bin/php /path/to/process1.php > /var/log/process1.log"
stop program = "/usr/bin/pkill /path/to/process1.php"
(Опять же, помните, что существует несколько процессов, подобных этому.) Это работает для запуска процессов, но не для их остановки - попытка остановки завершается ошибкой с сообщением monat «не удалось остановить». Мой текущий диагноз этой ситуации состоит в том, что она не работает, потому что pkill не находит процесс: выполняет аналогичный pgrep /path/to/process1.php
не может ничего найти. ps ax
показывает, среди прочего:
5307 ? S 0:00 /usr/bin/php /path/to/process1.php
Между тем, pgrep php
удалось найти pid всех процессов php, но я хочу убить только один из них.
Итак: есть ли способ получить здесь то, что я хочу? Я не собираюсь использовать pkill, но, похоже, он хорошо продуман ...
Проверьте флаг f в pgrep / pkill.
-f, --full использовать полное имя процесса для соответствия
Я не уверен на 100%, что это поможет вам, но если у вас уже есть process1.php, это поможет вам убить соответствующую программу.
Пример: я запускаю «php rob / conmon.php» и pgrep -f 'php rob / conmon.php' возвращает правильный PID, а pkill -f 'php rob / conmon.php' эквивалентно уничтожает PID.
Надеюсь это поможет!