如何使用 pgrep 查找特定的 PHP 进程(与 monit 相关)

如何使用 pgrep 查找特定的 PHP 进程(与 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"

(再次提醒,有多个进程与此类似。)这适用于启动进程,但不能用于停止进程——停止尝试失败,并显示一条“无法停止”消息。我目前对这种情况的诊断是,失败是因为 pkill 找不到进程:执行类似操作pgrep /path/to/process1.php无法找到任何东西。 ps ax显示以下内容:

5307 ? S 0:00 /usr/bin/php /path/to/process1.php

同时,pgrep php成功找到了所有 php 进程的 pid,但我只想终止其中一个。

那么:有没有办法在这里得到我想要的东西?我并不坚持使用 pkill,但它似乎经过深思熟虑...

答案1

查看 pgrep/pkill 的 f 标志以了解详细信息。

-f, --full 使用完整的进程名称进行匹配

我不能 100% 确定这是否会对您有帮助,但如果已经有 process1.php,这将帮助您终止相应的程序。

示例:我运行“php rob/conmon.php”,并且 pgrep -f 'php rob/conmon.php' 返回正确的 PID,而 pkill -f 'php rob/conmon.php' 等效地杀死该 PID。

希望这可以帮助!

相关内容