我想每分钟运行一次cron作业以启动脚本。那里很简单。但是,我需要确保不超过实例运行的X号(在脚本中定义)。这些是排队工人,所以如果在任何时间间隔内有6名工人仍然活跃,那么我就不会启动另一个实例。该脚本只是简单地启动一个PHP脚本,如果没有可用的工作,它将退出。现在我有一个shell脚本,它在退出后每隔10秒就会自动启动一次...但是在很长一段时间内没有任何作业,并且延迟时间很短。最终,我希望有两个cron工作峰值和非峰值,不同的时间间隔。实例有限的cron作业
1
A
回答
1
- 请确保您具有唯一的脚本名称。
然后检查6个实例已经运行
if [ $(pgrep '^UNIQUE_SCIPT_NAME$' -c) -lt 6 ] then # start my script else # do not start my script fi
1
我想说,如果你想像每一分钟一样频繁迭代,那么像你当前的shell脚本那样重新启动的过程就是你真正想做的事情。只需将延迟从10秒增加到一分钟即可。
这样,您也可以更容易地控制您的峰值和非峰值延迟,如您所愿。如果脚本在最后一次启动时发现了某些内容,或者如果它没有找到任何内容,则延迟时间会更长一些,如果简单地使用较短的延迟将会相当优雅。
+0
嗯...我喜欢这种基于成功的延迟的想法...将不得不尝试 – mondo 2012-02-04 00:30:06
0
你可以使用脚本像OneAtATime谨防多个同时执行。
0
这是我用我的shell脚本是什么:
echo -n "Checking if job is already running... "
me=`basename $0`
running=$(ps aux | grep ${me} | grep -v .log | grep -v grep | wc -l)
if [ $running -gt 1 ];
then
echo "already running, stopping job"
exit 1
else
echo "OK."
fi;
你要找的命令是在第3行只是你的PHP脚本名称替换$(me)
。如果您想知道grep .log
部分:我将输出管道输出到一个日志文件中,其名称部分包含脚本名称,所以这样我就可以避免它被重复计数。
相关问题
- 1. Cron作业限制
- 2. 带CakePHp ACL权限的Cron作业
- 3. 在magento的多个实例上设置Cron作业
- 4. 权限在cron作业否认COMAND
- 5. Cron作业没有运行
- 6. cron作业PHP
- 7. 笨cron作业
- 8. CRON作业codeigniter
- 9. random cron作业
- 10. Ubuntu cron作业
- 11. cron作业
- 12. cron作业dow和mon例外
- 13. Laravel的Cron作业
- 14. CakePHP的cron作业
- 15. 在AWS EC2实例中设置Cron作业
- 16. Google Apps中的Cron作业是否有时间限制?
- 17. cron作业不工作,没有错误
- 18. 是否有可能在亚马逊lightsail实例上运行cron作业?
- 19. cron作业报错
- 20. Cron作业计算
- 21. 设置cron作业
- 22. 计划cron作业
- 23. Yii和cron作业
- 24. 处理Cron作业
- 25. cron作业命令
- 26. 动态cron作业?
- 27. PHP和Cron作业
- 28. Cron作业和EasyPHP
- 29. 运行Cron作业
- 30. cron作业 - 硒 - org.openqa.selenium.firefox.NotConnectedException
请参见[流程管理](http://mywiki.wooledge.org/ProcessManagement#I_want_to_process_a_bunch_of_files_in_parallel.2C_and_when_one_finishes.2C_I_want_to_start_the_next._And_I_want_to_make_sure_there_are_exactly_5_jobs_running_at_a_time)。 – 2012-02-04 15:03:28