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