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


14

我知道每分钟要怎么做,但是每10秒钟又如何呢?

Answers:


10

您不能每10秒安排一次作业,但我想您可以将作业安排为每分钟运行一次,并以10s的间隔循环睡眠。这将以您的命令在十秒间隔到期之前完成为前提,否则下一条命令运行时您将重叠。这似乎是一个不稳定的解决方案,但是如果您可以保证脚本主命令的执行时间非常短,那么它将起作用。

#!/bin/bash
i=0

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

我做类似的事情...我只是在crontab中使用*,然后我的脚本会永远使用flock和loops,除非它无法获得锁,否则永远不会退出。
彼得

22

上周我有类似的任务。我的解决方案是将标准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重定向到日志文件。


2
+1用于创意cron使用
shodanshok

2
这是恕我直言的最佳解决方案。很清楚它在做什么,不需要脚本或第三方解决方案。
杰里米


0

Cron仅允许至少一分钟。你可以试试这个-

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

0

如果您想花不到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

如果您需要秒,请在date命令中添加微秒。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.