我在后台运行了许多 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。
希望这可以帮助!