每分钟运行一次cronjob的风险
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每分钟运行一次cronjob的风险相关的知识,希望对你有一定的参考价值。
我有一个php脚本,用于检查某个文件夹中的xml文件,然后将每个文件中的信息导入mysql数据库。
我想设置一个cronjob来运行每分钟,以便随时添加新文件,它们几乎可以立即导入,而无需我手动ssh并运行脚本。
我有一个if语句,用于检查文件是否存在,如果有,则只运行代码,否则回显“No files”。
我想知道如果经常这样运行有任何风险,是否会占用过多的资源?等等
答案
每分钟运行一个进程真的没有什么问题...除了通常的陷阱[我包括缓解方法]。我想说现代计算机真的很长一段时间了。如果您没有周期,那么每分钟额外的一些系统调用是错误的。
- 陷阱#1是脚本出现“错误”,并且由于某种原因它不会退出。症状:框崩溃,因为它无法再创建进程和/或打开文件描述符等。
如何解决:使脚本获取对文件的独占锁定。你可以把你的pid写到一个文件,但那很麻烦。如果您无法获取独占锁,则以前的版本正在运行,因此您应该退出。
这是flock()的PHP接口:PHP flock()
- 陷阱#2:它真的应该是一个守护进程。
如果某些事情需要“一直”完成,也许它应该“一直”完成。您可以使用文件锁定配方来确保您的脚本保持运行,或者您可以使用monit之类的东西来启动它。但你也可以通过使用cron和文件锁定来确保它保持稳定。
- 陷阱#3:你转换成一个守护进程,但是有一个内存泄漏,这个东西就像威利旺卡的女孩一样在太多的蓝莓上不断扩大。症状:OOM错误,交换等等。毕竟这是PHP。
解决方案:在1000 [或一些#]迭代后退出,然后使用cron和文件锁定模型来启动新版本[或monit或等效]。
以上是关于每分钟运行一次cronjob的风险的主要内容,如果未能解决你的问题,请参考以下文章