【问题标题】:How to setup CRON job to run every 10 seconds in Linux?如何设置 CRON 作业在 Linux 中每 10 秒运行一次?
【发布时间】:2015-07-29 12:35:35
【问题描述】:

我需要从开始时每 10 秒运行一次 CRON 作业。

在 Linux 中,如何在启动后每 10 秒运行一次CRON 作业?

我正在尝试解决如下问题:当我在 04:28:34 提出请求(或开始)时,它应该在 04:28:44 而不是 4:28:40 开始

这就是我所做的

# m h  dom mon dow   command
*/10 * * * * /usr/bin/wget http://api.us/application/

我做错了什么?为什么这不是每 10 秒触发一次wget

【问题讨论】:

  • 如果一个请求是在 04:28:34 发出的,而另一个请求是在 04:28:37 发出的,会发生什么?在这种情况下你需要两个请求,还是只需要一个?
  • @DCoder 它只有一个。在 04:28:34 发出的请求应该从 04:28:44 开始,而不是在 04:28:40
  • 在这种情况下,从第二个请求的角度来看,请求是在 7 秒后发送的,而不是 10 秒。这可以接受吗?它应该每 10 秒重复一次请求,直到您关闭服务器,还是需要在某个时候停止?
  • @DCoder 它应该在给定的时间停止。
  • 使用 shell 脚本。 cron 在这里是错误的解决方案。

标签: php linux apache cron


【解决方案1】:

为了详细说明 Sougata Bose 的回答,我认为 OP 希望从开始时间每 10 秒运行一次命令;不是第一分钟后的 10 秒,以及之后的每一分钟。

cron 的分辨率只有 1 分钟(我认为还有其他工具可能具有更精细的分辨率,但它们在 unix 上不是标准的)。

因此,要解决您的问题,您需要 60 秒 / 10 秒 = 6 个 cron 作业,每个作业都有一个睡眠。

例如运行 crontab -e 并将以下行添加到您选择的编辑器中:

* * * * * ( /usr/bin/wget http://api.us/application/ )  
* * * * * ( sleep 10 ; /usr/bin/wget http://api.us/application/ )  
* * * * * ( sleep 20 ; /usr/bin/wget http://api.us/application/ )  
* * * * * ( sleep 30 ; /usr/bin/wget http://api.us/application/ )  
* * * * * ( sleep 40 ; /usr/bin/wget http://api.us/application/ )  
* * * * * ( sleep 50 ; /usr/bin/wget http://api.us/application/ )  

【讨论】:

  • 不确定这是否适用于 Linux 命令行,但在 java7 及更高版本中,@Schedule spring 注释允许高达秒的分辨率。例如,这将每 10 秒触发一次您的任务:*/10 * * * * ? 尝试在您的表达式中添加一个额外的标记,看看是否有效。
  • 下面的答案比这更优雅,但无论如何谢谢。
【解决方案2】:

另一种选择是使用 crontab -e 编辑您的 crontab 并写入:

* * * * * for i in {1..6}; do /usr/bin/wget http://api.us/application/ & sleep 10; done

【讨论】:

  • 欢迎来到 SO!下次,请为您的答案添加更多解释。
  • 由于sleep是在命令执行完之后才执行的,所以间隔可能会超过10秒,具体取决于命令需要多长时间。应该考虑到这一点。
【解决方案3】:

*/10 * * * * 将每 10 分钟运行一次。
*/10 * * * * * 将每 10 秒运行一次。

您可以查看cron editor 了解更多选项。

【讨论】:

  • 这不起作用仅供参考。你会得到一个错误
  • 这不起作用。 Linux 上的 Cron 不支持这种表示法。 crontab.cronhub.io 具有误导性,它没有说明哪些平台支持这一点。这适用于 Mac,但不适用于标准 Linux 服务器
  • 感谢您的回答! cron 编辑器真的很有帮助。
  • thanks 效果很好,正好在 10 秒后开火,20 秒后开火,等等 - 正是我所需要的
  • 我猜这在 ubuntu 系统上不起作用
【解决方案4】:

在秒字段中使用逗号也可以:

0,10,20,30,40,50 * * * * *

【讨论】:

  • 这并不像其他答案那样让我害怕,它有效并且需要更多的支持。
  • 它不能在 Linux 上运行,在 Ubuntu 20.04 上测试过,它不能执行作业。正如其他回复中所指出的,这可能适用于 Mac,以及其他基于 crontab 符号的作业调度工具,但不适用于 Linux 的 crontab。
  • 在 linux 上不起作用
【解决方案5】:

如果某事应该每 10 秒运行一次,它不一定是 cron 作业。它可以是一个无限循环的脚本,里面有睡眠,例如:

while true
do
  # or whatever command you need to run
  rm -rf /var/www/some-directory
  sleep 10
done

并运行它

nohup bash my-endless-script.sh 

它将在后台运行,如果您关闭终端,它也会继续运行。

您可以使用 kill 命令终止运行。

【讨论】:

    【解决方案6】:

    请改用watch;例如:

    watch -n10 -x your_command
    

    【讨论】:

      猜你喜欢
      • 2019-07-10
      • 2011-03-20
      • 1970-01-01
      • 2015-07-29
      • 2021-12-18
      • 1970-01-01
      • 2018-03-22
      • 2015-07-15
      • 2021-06-17
      相关资源
      最近更新 更多