Как я могу найти определенный процесс 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.

Надеюсь это поможет!

Другие вопросы по тегам