在CMS类型应用程序的开发框架内,我使用带有php的定期脚本,因为我不能使用crontab,而不是服务器的管理员。
这个伪密码运行良好。不说细节,它看起来像这样:
public function activateCron()
{
ignore_user_abort(true);
set_time_limit(0);
$time_sleep = 600;
while ($this->IsStopCron() == 1) {
sleep($time_sleep);
exec('php ExecCron.php');
}
}
然而,问题是,如果服务器重新启动,它就会停止。
我不认为有一种方法可以自动重新启动它(此外,这对我来说似乎不是一个好主意(,但我仍然想知道一种检测服务器何时停止的方法,例如自动发送邮件,要求服务器管理员重新启动它
在我的谷歌搜索中,我找到了register_shutdown_function,但我不确定这是否解决了我的问题,也不确定如何解决。在任何情况下,当我尝试使用它时,它都没有成功
感谢
register_shutdown_function
可能不是一种可靠的方法。假设系统配置为允许服务在一段时间内干净地结束,pcntl_signal
可能可以检测到干净的服务器重启,但如果发生崩溃,这仍然没有帮助。
我个人认为自动重启实际上是的方法;当然PHP本身并没有提供任何机制。
不过,一种可能的方法是搭载web请求。这样,当服务器重新启动时,也就是有人第一次访问您的网站时,它会触发您的代码,并(重新(启动phpcli进程,就像您在上面的代码中所做的那样。
如果服务器运行linux/systemd(这是常见的(,可能的另一种途径是可选的;既然您可以使用exec('php ExecCron.php');
启动php-cli
进程,那么您也可以运行systemctl --user
。如果在多用户系统上启用systemdlinger
ing,则它允许用户定义";服务";在那里,它将在启动时启动(或在特定时间或时间间隔运行;就像cronjobs一样(。