PHP简单守护进程,不使用pcntl_fork

时间:2012-06-29 22:10:52

标签: php bash cron daemon background-process

我的部分Web应用程序是一个后台脚本,它从beanstalkd服务器轮询并处理数据。

此脚本需要连续运行(如守护程序)。如果崩溃,则需要再次启动。它也不能启动两次(更确切地说是两次运行)。

由于我想简化部署和开发过程,我想避免使用pcntl_fork。它在Windows上不可用,它需要在Mac上重新编译PHP,有时在Linux上也是如此......

我可以简单地使用bash脚本在后台启动PHP脚本吗?

# verify that the script is not already running
...

/usr/bin/php myScript.php &

如果我每小时左右用crontab执行这个批处理,我的进程应该连续运行并在崩溃时最多重启一小时?

1 个答案:

答案 0 :(得分:0)

假设您盲目地控制运行脚本的服务器,Supervisor可能是一个很好的解决方案。

这是一个用Python编写的进程控制守护进程。您可以将其配置为启动PHP脚本并使其保持运行。 PHP脚本本身不需要做任何特殊的事情。没有分叉,没有手动过程控制,没有。

另一方面,您也担心pcntl_fork无法在Windows上使用。如果你真的在Windows上运行这个东西,那么Supervisor不会为你工作,因为它不适合Windows。请记住,Windows对Unix风格的守护进程并不友好,因为它希望将守护进程控制为服务。虽然that's possible,但它并不是一个简单或优雅的解决方案。