关于apache:如何保持持久的PHP脚本运行?

How to keep a persistent PHP script running?

我有一个PHP脚本,用于监听传入的套接字请求等。我需要这个脚本在服务器上持续运行(它在无限循环中运行)。

如何启动和管理此流程?我试着通过ssh/putty启动它,但是一旦ssh连接超时,脚本就会消失。


1
myscript.php &

这将在后台运行脚本

你可以查一下

1
ps aux | grep myscript.php

正如Patrick在下面的注释中提到的,从命令行运行PHP脚本没有最长的执行时间。myscript.php将无限期运行。


我们最近也有类似的需求。我们正在运行一个Ubuntu14.04LTS服务器,因此创建了一个upstart进程,以在引导时启动该进程,并在该进程因任何原因退出时重新启动。

它对我们来说非常好,包括自动重启;我们长期运行的过程最终会断开MySQL连接。在upstart进程自动重新启动进程之前,脚本处理异常并退出。我们还添加了一个cron脚本来监视进程,以防出现更大的错误,而upstart放弃尝试重新启动;如果简单的重新启动无法纠正先前的错误,我们将提供故障保护。


如果使用ignore_user_abort()并设置_time_limit(),则可以使用浏览器。


通过ssh在后台运行脚本,如下所述:让ssh在目标计算机的后台执行命令

然后我建议您有一种方法来监视脚本是否仍在运行。您提到过您的脚本在端口上监听,您可以编写一个脚本,每隔一段时间检查一次,看看端口是否仍然打开。

另一个选项是监视进程ID。当脚本第一次执行时,可以使用getmypid函数获取进程ID并将其存储在文件中。然后,您可以使用ps -p 1234定期检查它是否仍在运行。

另一个解决方案:如何检查PHP脚本是否仍在运行


如果长期运行的可靠性是目标,那么,监工是完美的!

我通过https://lornajane.net/posts/2012/watch-over-long-running-processes-with-supervisor找到了它。

编辑:此工具的目的是解决所述问题。规定的目标是使长期运行的过程保持运行。一条评论指出(有效地)当前接受的解决方案将不可靠,因为脚本可能崩溃等。因此,解决方案是使用一个工具"启动和管理这个过程",这也保持了它的活力。这个工具就是这样做的:它在后台启动进程并使其保持运行。


您可以运行它的命令行。您必须添加一个"在后台运行"修饰符,这样系统就不会等待脚本完成。基本上,您在命令行的末尾放了一个&;符号。

您必须做的一件事是创建一个在启动时运行PHP脚本的ini shell脚本,以防重新启动。


为什么不做一个do while循环呢?do { /* your code */ } while $something == 0;

然后,当有什么事情触发脚本停止时,将$something设置为0以外的值。