如何在同一秒钟每分钟运行一个脚本?

时间:2015-12-16 15:43:44

标签: bash crontab

我有一个脚本写入两个服务器的两个日期时间的文件。此脚本每分钟启动一次,但存储的第二个脚本并不总是相同。

例如:

2015-12-16 0:16:01.864  2015-12-16 0:16:01.972
2015-12-16 0:17:01.241  2015-12-16 0:17:01.350
2015-12-16 0:18:01.626  2015-12-16 0:18:01.735
2015-12-16 0:19:02.102  2015-12-16 0:19:02.210

正如你所看到的那样,第四行写的是02秒,而不是01。

在crontab我遇到这种情况:

* * * * * root cd /home/Project; ./PollDateServer.sh >/dev/null 2>&1

谢谢

1 个答案:

答案 0 :(得分:-1)

如果您每分钟启动一次脚本,您可以尝试“尝试”:

* * * * * echo 'cd /home/Project; ./PollDateServer.sh' | at now + 1 minutes

必须安装“at”包!

修改

没有“at”的更准确的版本:

* * * * * sleep $(echo 60-$(date '+\%S.\%N') | bc); cd /home/Project; ./PollDateServer.sh
到目前为止的准确性:

22:10:00.007780247
22:11:00.003994573
22:12:00.007836359
22:13:00.005249502
22:14:00.003309822
22:15:00.004220122
22:16:00.004105306
22:17:00.006213730
22:18:00.006020664
22:19:00.003666325

它是如何运作的:

$ date '+%S.%N'
17.416097038

...给出当前的秒和纳秒

$ echo 60-$(date '+%S.%N')
60-17.416097038

...生成一个表达式来计算下一整分钟的剩余秒数和纳秒数。

$ echo 60-$(date '+%S.%N') | bc
42.583902962

...计算下一整分钟的剩余秒数和纳秒数

......最后睡了很长时间:

$ sleep $(echo 60-$(date '+%S.%N') | bc); date '+%H:%M:%S.%N'
12:10:00.004634130

...休眠计算时间并返回当前时间