gpt4 book ai didi

php - 每分钟运行一次 cronjob 的风险

转载 作者:行者123 更新时间:2023-11-29 05:57:43 25 4
gpt4 key购买 nike

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

我想设置一个 cronjob 每分钟运行一次,这样每当添加新文件时,它们几乎会立即被导入,而无需我手动 ssh 进入并运行脚本。

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

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

最佳答案

每分钟运行一个进程并没有什么错误……除了通常的陷阱 [我将其包含在缓解方法中]。我确实想说,对于现代计算机来说,一分钟真的是很长的时间。如果您的周期不足,那么每分钟几次额外的系统调用是错误的地方。

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

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

这是 flock() 的 PHP 接口(interface):PHP flock()

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

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

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

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

关于php - 每分钟运行一次 cronjob 的风险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47815360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com