【问题标题】:Unix Cron Jobs Working AlgorithmUnix Cron Jobs 工作算法
【发布时间】:2014-04-06 13:39:58
【问题描述】:

如果设置为每分钟的 cron 作业正在执行一个耗时超过 1 分钟的文件,Unix 内核会做什么。

例如:

我有以下 Shell 命令每分钟执行一次 PHP 脚本。

* * * * * php /home/user/public_html/script.php

我的 PHP 脚本包含 SQL 代码,用于从数据库中选择电子邮件并使用 for 循环将邮件发送到给定的电子邮件。

问题:如果我的数据库包含数千封邮件并且需要超过 1 分钟才能完成第一次执行,系统内核将如何响应。

【问题讨论】:

    标签: php unix cron


    【解决方案1】:

    它将再次执行它,除非您自己采取措施阻止多个实例运行。您可以通过运行以下脚本对其进行测试:

    date >> /tmp/a
    sleep 90
    date >> /tmp/a
    

    【讨论】:

    • 你的意思是例如如果我在 db 中有 10k 封邮件,并且它在 1 分钟内仅发送 2k 封邮件,那么它将停止执行,并将在接下来的每分钟 2k 封邮件的间隔内处理剩余的 8k 封邮件。
    • 不,我的意思是它将继续处理所有 10k 邮件,直到完成,并且通过它的 1/5 的方式将开始另一个重叠的工作,并重新并行执行。
    • 有点混乱,但我想我明白了。
    • @Hsaka,cron 所做的只是在给定时间启动一个进程。然后它将像手动启动一样运行完成。如果 cron 一分钟后再次启动它,它将作为一个完全独立的进程运行。
    【解决方案2】:

    你有两个选择:

    1. 降低 cron 频率 - 以确保作业完成
    2. 使用锁来防止作业在运行时被执行。

    我们经常使用选项二,简单地将锁定标志写入数据库或文件系统 - 然后在脚本完成后将其清除。

    【讨论】:

      猜你喜欢
      • 2016-06-17
      • 2019-05-07
      • 2017-10-17
      • 2016-03-08
      • 2018-08-03
      • 2015-01-21
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多