尽管 Halayem Anis 的解决方案非常有创意,但我认为重要的是要注意,您永远无法确定PHP
脚本会在后台继续运行。因此,如果您选择在“Apache start”上启动脚本,那么您可能会经常结束操作重置 Apache,重启脚本很简单。
我认为这就是您提出这个问题的方式,因为在普通服务器上,您永远不必触摸 Apache 重置按钮。它在系统启动时启动,然后运行。如果是这种情况,您可以php myscript.php
在启动时简单地运行您的命令。
考虑到无法确保脚本继续运行,我将使用不同的方法,检查它是否正在运行,如果没有,则重新启动它。
所以第一步是让跟踪脚本是否正在运行成为可能。我会采用一种简单的方法,即myscript.php
每 5 秒左右将一个字节写入文件。这样我可以使用文件的最后修改时间来查看它是否仍在运行,因为last modified time + 5 seconds < now == not running
.
您还可以每 5 秒左右将上次访问时间存储在数据库中。如果您有大量流量,可能会比访问文件稍快一些。
第二部分是让每个请求检查脚本是否正在运行。对于这两项工作,我将使用 为PHP.ini
每个请求添加一个 php 脚本。您可以使用auto_append_file选项来完成。
这个前置脚本将像这样工作:
<?php
$filename = 'checkonline.txt';
$cmd = "php myscript.php";
if (filemtime($filename)+5<time()) {
//run in background without freezing php
//based on code posted on PHP exec manual, linked below
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}
else {
exec($cmd . " > /dev/null &");
}
}
?>
确保检查filemtime和exec的工作方式以及您需要记住的内容。它们在 Windows/*nix 上的工作方式略有不同。