解决cron时间限制的方法

时间:2011-02-06 03:50:44

标签: php linux cron

所以基本上我正在使用一个cron作业来执行一个需要相当多时间运行的php脚本(从ftp下拉更新的xml,解压缩,mysql操作,api访问等)。问题是我们在服务器上运行,将cron作业的运行时间限制为15分钟。

我的问题是:可以使用哪些方法来解决这个限制?将脚本分解成碎片仍然会导致碎片在15分钟的时间限制内运行,所以这样就可以了。执行一段时间后,有没有办法重定向到另一个PHP脚本?或者可以以某种方式使用bash脚本在达到15分钟的时间限制之前重启脚本?

谢谢!

3 个答案:

答案 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取消关联