Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用pcntl_fork的PHP简单守护程序_Php_Bash_Cron_Daemon_Background Process - Fatal编程技术网

不使用pcntl_fork的PHP简单守护程序

不使用pcntl_fork的PHP简单守护程序,php,bash,cron,daemon,background-process,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

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

此脚本需要像守护进程一样连续运行。如果它崩溃,需要重新启动。它也不能启动两次更精确地运行两次

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

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

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

/usr/bin/php myScript.php &

如果我每隔一个小时左右使用crontab执行此批处理,我的进程应该连续运行,如果崩溃,最长应在一小时内重新启动?

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

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


另一方面,您也表达了对Windows上无法使用pcntl_fork的担忧。若你们真的在Windows上运行这个东西,那个么Supervisor就不适合你们,因为它对Windows不友好。请记住,Windows对Unix风格的守护程序也不是很友好,因为它希望将守护程序作为服务进行控制。然而,这并不是一个简单或优雅的解决方案。

很好的解决方案。对于Windows或任何开发环境,最重要的是能够运行脚本。如果它不以执事的身份运行,这不是一个大问题。pcntl_fork甚至会阻止脚本启动,所以这是主要问题。在这种情况下,因为脚本只需要完全不经修改地运行,所以Supervisor会工作得很好。