我基本上有一个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]
答案 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。