【问题标题】:Run a cron job every second minute of every hour每小时每秒钟运行一次 cron 作业
【发布时间】:2018-02-18 02:08:27
【问题描述】:

我有一个 cron 作业,我想每隔一小时运行一次。在此之前,我会像每分钟一样运行它

* * * * * /var/www/html/cron.php

但我现在需要它每小时每秒钟运行一次。如何做到这一点?。

【问题讨论】:

    标签: cron


    【解决方案1】:

    crontab的格式如下

    m h  dom mon dow   command
    

    所以你可以这样做

    0 * * * yourcommand
    

    它将在每小时 00 分钟运行一次

    【讨论】:

    • 所以我可以像02 * * * yourcommand 一样在每小时的每一秒和每小时的第45 分钟像45 * * * yourcommand 一样运行?
    • 好的。假设我需要 cron 任务在 2 到 2:59 之间运行,并且脚本需要更多时间来处理 2 到 3 分钟之间的时间空间,会发生什么?脚本终止了吗?
    • 不,它会一直运行到完成。如果直到下一个 cron 运行时才运行,它将在单独的线程中重新启动
    • 我很好奇,你能展示一下每 45 分钟运行一次命令以及每小时每 45 分钟运行一次命令的 crontab 吗?这将消除很多疑问。
    【解决方案2】:

    如果您的操作系统是FreeBSD,您可以使用@every_second,例如:

    @every_second  /var/www/html/cron.php
    

    对于其他系统,这可能有效:

    每小时都有点事情:

    @hourly /var/www/html/cron.php
    

    或每 45 分钟一次:

    */45 * * * * /var/www/html/cron.php
    

    来自man 5 crontab

           string          meaning
           ------          -------
           @reboot         Run once, at startup of cron.
           @yearly         Run once a year, "0 0 1 1 *".
           @annually       (same as @yearly)
           @monthly        Run once a month, "0 0 1 * *".
           @weekly         Run once a week, "0 0 * * 0".
           @daily          Run once a day, "0 0 * * *".
           @midnight       (same as @daily)
           @hourly         Run once an hour, "0 * * * *".
           @every_minute   Run once a minute, "*/1 * * * *".
           @every_second   Run once a second.
    

    另外,请查看此参考:https://crontab.guru/

    如果您使用的系统不支持@every_second,您可以尝试以下方式:

    * * * * * /var/www/html/cron.php
    * * * * * (sleep 30; /var/www/html/cron.php)
    

    基本上,它们在同一时间(每分钟)运行,但其中一个会在启动前等待 30 秒,因此每 30 秒会调用一次 /var/www/html/cron.php

    【讨论】:

    • 我可以设置一个 cron 在一天中的确切时间运行,例如 2300 小时
    • 0 23 /var/www/html/cron.php ?
    • 所以在一天的最后时刻59 23 * * * /path/to/your/command 将在 2359 小时运行
    【解决方案3】:

    对我来说,我能得到的唯一解决方案是:

    2-59/* * * * *
    

    翻译成简单的英语为:

    从 2 到 59,每 60 分钟一次。

    我几乎不知道 cron 语法,所以不确定这是唯一的方法还是至少是更好的方法之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-20
      • 2021-12-18
      • 2013-11-27
      • 2018-03-22
      • 2011-06-20
      • 2013-07-08
      • 2019-11-19
      • 1970-01-01
      相关资源
      最近更新 更多