如何在服务器重新启动时检测php cronjob的关闭



在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。如果在多用户系统上启用systemdlingering,则它允许用户定义";服务";在那里,它将在启动时启动(或在特定时间或时间间隔运行;就像cronjobs一样(。

最新更新