Назад | Перейти на главную страницу

Как я могу найти конкретный процесс PHP с помощью pgrep (связанный с monit)

У меня есть несколько процессов 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.

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