Как я могу найти определенный процесс PHP с pgrep (monit related)
У меня есть несколько 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
удается найти pids всех процессов php, но я хочу убить только один из них.
Итак: есть ли способ получить то, что я хочу здесь? Я не собираюсь использовать pkill, но, кажется, это хорошо продумано...
1 ответ
Проверьте флаг 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.
Надеюсь это поможет!