5 php queue monitoring process
我有一个PHP侦听队列的脚本.从理论上说,它永远不应该死.有什么东西要检查它是否还在运行?喜欢的东西Ruby's God ( http://god.rubyforge.org/ )了PHP?
上帝是语言无关的,但是有一个适用于Windows的解决方案也会很好.
小智 12
我有同样的问题 - 想要检查脚本是否正在运行.所以我想出了这个,我把它作为一个cron工作.它将正在运行的进程作为一个数组进行抓取,并循环访问每一行并检查文件名.似乎工作正常.将#user#替换为您的脚本用户.
exec("ps -U #user# -u #user# u", $output, $result);
foreach ($output AS $line) if(strpos($line, "test.php")) echo "found";
Run Code Online (Sandbox Code Playgroud)
在linux下运行ps如下:
ps -C php -f
Run Code Online (Sandbox Code Playgroud)
然后你可以在php脚本中执行:
$output = shell_exec('ps -C php -f');
if (strpos($output, "php my_script.php")===false) {
shell_exec('php my_script.php > /dev/null 2>&1 &');
}
Run Code Online (Sandbox Code Playgroud)
上面的代码列出了所有正在运行的php进程,然后检查"my_script.php"是否在正在运行的进程列表中,如果没有它运行进程并且不等待进程终止继续进行它的操作正在做.
只需在脚本后附加第二个命令。当/如果它停止,则调用第二个命令。例如。:
php daemon.php 2>&1 | mail -s "Daemon stopped" you@example.org
Run Code Online (Sandbox Code Playgroud)
从技术上讲,这会立即调用邮件程序,但仅在 php 脚本结束时才完成命令。这样做会捕获 php-script 的输出并包含在邮件正文中,这对于调试导致脚本停止的原因非常有用。
简单的 bash 脚本
#!/bin/bash
while [true]; do
if ! pidof -x script.php;
then
php script.php &
fi
done
Run Code Online (Sandbox Code Playgroud)