如何在下一个10秒边界的Bash中运行命令?

时间:2016-04-13 06:27:43

标签: bash cron

我想在接下来的10秒边界(例如mpstat -u 10)运行命令。也就是说,我希望命令从0,10,20,......或第50秒开始。这将基本上避免我用来生成图形的RRDtool,并且在特定时间期望数据来自插值。

5 个答案:

答案 0 :(得分:3)

我提出了似乎有用的东西!

diff=$((10 - $(date '+%s') % 10)); sleep $diff; mpstat -u 10

答案 1 :(得分:2)

我的解决方案在每个循环中等待,直到当前分钟的秒数是{0,10,20,30,40,50}中的一个,然后执行命令(在我的示例中为日期)。如果执行命令的时间超过10秒,则跳过执行。

while true ; do 
  sleep $((10 - `date +%S` % 10)); 
  date; #or any other command
done

答案 2 :(得分:0)

你总是可以为你想要的每个“循环”使用sleep 10。所以,如果它会在一个循环中,它就像那样,所以它将每10秒运行你想要的东西。

while sth.true
do
       do.sth
       sleep 10
done

答案 3 :(得分:0)

尝试这个奇怪的解决方案:

$  let sec=(10 - $(date "+%S") % 10 ) ; sleep $sec ; mpstat -u 10
Linux 3.16.0-62-generic (Tetrapharmakon)    04/13/16    _x86_64_    (8 CPU)

12:11:40     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:11:50     all    0.89    0.01    0.43    0.09    0.00    0.01    0.00    0.00    0.00   98.57

----

第一个不够准确的历史解决方案。

让cron守护程序每分钟启动一个自定义脚本:

$ crontab -l
* * * * * /tmp/myscript.sh >> /tmp/date.output

该脚本每10秒运行一次命令:

#!/bin/bash --
for i in 1 2 3 4 5 6; do
  date
  sleep 10
done

答案 4 :(得分:0)

Bash内置SECONDS变量对此非常有用:

while : ; do
    sleep $(( 10 - SECONDS%10 ))
    mpstat -u 10
done