6

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

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

这是 cron 作业命令的样子

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

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

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

2 回答 2

17

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

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

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

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

<?php set_time_limit(18000);
于 2013-01-31T22:31:15.347 回答
0

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

如果您的 PHP 配置允许(即不在安全模式下),更优雅的方法是在脚本本身中设置执行限制。

于 2013-01-31T22:33:28.893 回答