如何在 Linux 中安排每 10 秒运行一次的 cron 作业?

如何在 Linux 中安排每 10 秒运行一次的 cron 作业?

我知道每分钟该怎么做,但是每10秒怎么做呢?

答案1

您无法每十秒安排一次作业,但我想您可以将作业安排为每分钟运行一次,并以 10 秒为间隔循环休眠。这将取决于您的命令在十秒间隔到期之前完成,否则在下一个命令运行时会出现重叠。这听起来像是一个不稳定的解决方案,但如果您可以保证脚本主命令的执行时间非常短,那么它就会起作用。

#!/bin/bash
i=0

while [ $i -lt 6 ]; do
  /run/your/command &
  sleep 10
  i=$(( i + 1 ))
done

答案2

上周我遇到了类似的任务。我的解决方案是将标准 cron 条目乘以所需的频率。我的 crontab 如下所示:

* * * * * /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 10; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 20; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 30; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 40; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 50; /usr/local/bin/php /var/www/myscript.php

如果你想检查 myscript.php 的结果,例如进行调试,只需附加

&> /tmp/myscipt.log

到上面 crontab 中的每一行。然后 stderr 和 stdout 被重定向到日志文件。

答案3

Cron 只允许最少一分钟。你可以试试这个 -

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

答案4

如果您想要将时间缩短至 10 秒以下(例如 5 秒),我建议使用如下小脚本来制作工作循环:

#!/bin/bash

INTERVAL=5
while true; do

  echo "do something"

  # wait for next interval
  WAIT_UNTIL=$(($(date +%s) + $INTERVAL))
  while [ $(date +%s) -lt $WAIT_UNTIL ]; do
    sleep 1
  done

done

如果需要精确到秒,请将微秒添加到日期命令中。

相关内容