5小时后杀死进程的cron作业

时间:2013-01-31 22:28:41

标签: php cron crontab

我基本上有一个cron作业,它每晚都会运行,可以更新数据库中的数千种产品。

我在晚上运行cron作业的原因是因为服务器上的延迟会减少,因为在此期间没有多少人访问该网站,cron作业可以持续数天而不受任何干扰。

这是cron job命令的样子

30 23 * * *     /usr/bin/php /var/www/ul/prices_all.php >> /var/www/ul/log/prices_all.txt

我想知道的是,是否有可能创建一个在5个小时后杀死此过程的cron作业,例如

30 05 * * *     kill /var/www/ul/prices_all.php[process]

2 个答案:

答案 0 :(得分:14)

您可以使用timeout(coreutils)执行此操作:

30 23 * * *   timeout 18000  /usr/bin/php /var/www/ul/prices_all.php >> /var/www/ul/log/prices_all.txt

它只是设置一个超时(18000secs = 5小时),如果在此之后它仍在运行,则会终止该进程。

或者您可以在php文件中设置超时:

<?php set_time_limit(18000);

答案 1 :(得分:0)

是的,你可以创建一个5小时后杀死进程的cronjob。有一些不错的方法可以做到这一点。例如,您可以让第一个脚本在启动时将其pid(您可以使用getmypid())写入文件,然后让第二个cron作业读取该pid并将其删除。这样可行,但非常不优雅。

如果您的PHP配置允许(即,不处于安全模式),更优雅的方法是在脚本中设置execution limit