我的部分Web应用程序是一个后台脚本,它从beanstalkd服务器轮询并处理数据。
此脚本需要连续运行(如守护程序)。如果崩溃,则需要再次启动。它也不能启动两次(更确切地说是两次运行)。
由于我想简化部署和开发过程,我想避免使用pcntl_fork
。它在Windows上不可用,它需要在Mac上重新编译PHP,有时在Linux上也是如此......
我可以简单地使用bash脚本在后台启动PHP脚本吗?
# verify that the script is not already running
...
/usr/bin/php myScript.php &
如果我每小时左右用crontab执行这个批处理,我的进程应该连续运行并在崩溃时最多重启一小时?
答案 0 :(得分:0)
假设您盲目地控制运行脚本的服务器,Supervisor可能是一个很好的解决方案。
这是一个用Python编写的进程控制守护进程。您可以将其配置为启动PHP脚本并使其保持运行。 PHP脚本本身不需要做任何特殊的事情。没有分叉,没有手动过程控制,没有。
另一方面,您也担心pcntl_fork
无法在Windows上使用。如果你真的在Windows上运行这个东西,那么Supervisor不会为你工作,因为它不适合Windows。请记住,Windows对Unix风格的守护进程并不友好,因为它希望将守护进程控制为服务。虽然that's possible,但它并不是一个简单或优雅的解决方案。