每分钟运行一次 cronjob 的风险

Edw*_*144 5 php xml mysql cron

我有一个 php 脚本,旨在检查某个文件夹中的 xml 文件,然后将每个文件中的信息导入 MySQL 数据库。

我想设置一个 cronjob 每分钟运行一次,以便在添加新文件时几乎可以立即导入它们,而无需手动 ssh 并运行脚本。

我有一个 if 语句,它检查文件是否存在,如果存在,则只运行代码,否则回显“无文件”。

我想知道一直运行这个是否有任何风险,是否会占用过多的资源?等等

Bre*_*aub 5

每分钟运行一个进程确实没有什么问题......除了常见的陷阱(我包含了缓解方法)。我确实想说,对于现代计算机来说,一分钟是非常非常长的时间。如果周期不足,那么每分钟几次额外的系统调用是错误的选择。

  • 陷阱 #1 是脚本出现“错误”,并且由于某种原因它无法退出。症状:盒子崩溃,因为它无法创建更多进程和/或打开文件描述符等。

如何解决:让脚本获取文件的独占锁。你可以将你的 pid 写入一个文件,但这很麻烦。如果您无法获取独占锁,则说明以前的版本正在运行,因此您应该退出。

以下是 foll() 的 PHP 接口:PHP foll()

  • 陷阱#2:它确实应该是一个守护进程。

如果某件事需要“一直做”,也许它真的应该“一直做”。您可以使用文件锁定配方来确保您的脚本保持正常运行,或者您可以使用 monit 之类的东西来启动它。但您也可以通过使用 cron 和文件锁定来确保它保持正常运行。

  • 陷阱#3:你转换为守护进程,但存在内存泄漏,并且它不断膨胀,就像《威利旺卡》中吃了太多蓝莓的女孩一样。症状:OOM错误、交换等。这毕竟是PHP。

解决方案:1000 [或一些 #] 迭代后退出,然后使用 cron 和文件锁定模型启动新版本 [或 monit 或等效]。