所以基本上我正在使用一个cron作业来执行一个需要相当多时间运行的php脚本(从ftp下拉更新的xml,解压缩,mysql操作,api访问等)。问题是我们在服务器上运行,将cron作业的运行时间限制为15分钟。
我的问题是:可以使用哪些方法来解决这个限制?将脚本分解成碎片仍然会导致碎片在15分钟的时间限制内运行,所以这样就可以了。执行一段时间后,有没有办法重定向到另一个PHP脚本?或者可以以某种方式使用bash脚本在达到15分钟的时间限制之前重启脚本?
谢谢!
答案 0 :(得分:2)
我的第一个建议是找到一个新的主机,但听起来这对你来说不是一个选择。
您可以在达到15分钟的时间限制之前跟踪数据库或平面文件中的运行时和保存状态。然后,cron中的下一个回合将查看数据库或文件,并知道从哪里开始。
这取决于你的脚本当然在做什么。如果你只是在X个记录上执行相同的任务,听起来你可能能够实现这样的事情。
答案 1 :(得分:0)
有点取决于他们如何实施限制。您也许可以使用exec()
并在某个时刻启动另一个脚本来分解该过程。
你无法真正'重启'脚本。如果可以的话,它只是从头开始。
我不明白为什么你不能分手?对于每天从cron启动的脚本,您可以使用15分钟?听起来你需要一个不同的主机提供商,这个限制看起来非常蹩脚。 15分钟,你正在处理什么样的大文件。也许你应该努力让它在不到15分钟的时间内运行。
修改
我在想,因为限制听起来就像是从cron运行的脚本,你为什么不在另一个系统上使用实际的cron,只需使用wget来调用远程服务器上的脚本。
答案 2 :(得分:0)
您可以尝试将cron作业背景化为脚本。像
这样的东西 0 0 * * * php /path/to/file.php &
我从来没有尝试过这种策略,因为我从未有过那么长时间运行的cron工作,但它会将脚本与cron取消关联