bash脚本在crontab中运行不正常,但手动运行正常

我写了一个小脚本来确定每小时的平均IOP,在此之后,我手动将其转换为graphics和电子表格,供pipe理人员讨论即将进行的扩展项目的SAN升级。 运行的系统当前是运行RHEL 6的物理机器。

我有脚本安排在根的crontab如下所示:

0 * * * * /bin/bash /IOPsLogs/IOPs.sh >> /var/log/cronjobIOPs.log 2>&1 

我的脚本IOPs.sh看起来像:

 #!/bin/bash date >> /var/log/cronjobIOPs.log date +"%Y-%m-%d--%H:00" >> /IOPsLogs/Daily$(date +%Y-%m-%d).log timeout -sHUP 60m iostat -x 1 | grep sda -B 1 >> /IOPsLogs/IOPs_$(date +%Y-%m-%d--%H:00).log grep "sda" /IOPsLogs/IOPs_$(date +%Y-%m-%d--%H:00 -d "1 hour ago").log | awk '{sum+=$4} END { print "Average IOPs read'/'sec= ",sum/NR}' >> /IOPsLogs/Daily$(date +%Y-%m-%d).log grep "sda" /IOPsLogs/IOPs_$(date +%Y-%m-%d--%H:00 -d "1 hour ago").log | awk '{sum+=$5} END { print "Average IOPs write'/'sec= ",sum/NR}' >> /IOPsLogs/Daily$(date +%Y-%m-%d).log 

日志文件“/var/log/cronjobIOPs.log”看起来像:(这是好的,因为我没有看到任何错误。)

 Mon Apr 27 00:00:01 MST 2015 Mon Apr 27 01:00:01 MST 2015 Mon Apr 27 02:00:01 MST 2015 Mon Apr 27 03:00:01 MST 2015 Mon Apr 27 04:00:01 MST 2015 Mon Apr 27 05:00:01 MST 2015 Mon Apr 27 06:00:01 MST 2015 Mon Apr 27 07:00:01 MST 2015 Mon Apr 27 08:00:01 MST 2015 Mon Apr 27 09:00:01 MST 2015 Mon Apr 27 10:00:01 MST 2015 Mon Apr 27 11:00:01 MST 2015 Mon Apr 27 12:00:01 MST 2015 Mon Apr 27 13:00:01 MST 2015 Mon Apr 27 14:00:01 MST 2015 Mon Apr 27 15:00:01 MST 2015 Mon Apr 27 16:00:01 MST 2015 Mon Apr 27 17:00:01 MST 2015 Mon Apr 27 18:00:01 MST 2015 Mon Apr 27 19:00:01 MST 2015 Mon Apr 27 20:00:01 MST 2015 Mon Apr 27 21:00:01 MST 2015 Mon Apr 27 22:00:01 MST 2015 Mon Apr 27 23:00:01 MST 2015 Tue Apr 28 00:00:01 MST 2015 Tue Apr 28 01:00:01 MST 2015 Tue Apr 28 02:00:01 MST 2015 Tue Apr 28 03:00:01 MST 2015 Tue Apr 28 04:00:01 MST 2015 Tue Apr 28 05:00:01 MST 2015 Tue Apr 28 06:00:01 MST 2015 Tue Apr 28 07:00:01 MST 2015 Tue Apr 28 08:00:01 MST 2015 Tue Apr 28 09:00:01 MST 2015 

现在我的问题是,每日日志不一致,提供一个读写平均每小时。 有时它提供了两个以上的时间戳或两个时间戳的答案。 某种东西似乎与某种程度上的时间closures? (不是一个虚拟机,多年来没有看到任何时间滑点。)如果我每小时手动运行,那么它工作得很好。 有没有人有任何想法或不同的方法?

 Average IOPs read/sec= 0.0442611 Average IOPs write/sec= 13.4663 2015-04-27--00:00 Average IOPs read/sec= 79.1727 Average IOPs write/sec= 22.7509 2015-04-27--01:00 2015-04-27--02:00 Average IOPs read/sec= 0.0370389 Average IOPs write/sec= 13.1389 Average IOPs read/sec= 36.6858 2015-04-27--03:00 Average IOPs write/sec= 250.514 Average IOPs read/sec= 32.6261 2015-04-27--04:00 Average IOPs write/sec= 391.811 Average IOPs read/sec= 1.64334 Average IOPs write/sec= 84.6204 2015-04-27--05:00 2015-04-27--06:00 Average IOPs read/sec= 0.0487056 Average IOPs write/sec= 12.8323 Average IOPs read/sec= 0.0617611 Average IOPs write/sec= 14.0306 2015-04-27--07:00 2015-04-27--08:00 Average IOPs read/sec= 0.11815 Average IOPs write/sec= 14.094 Average IOPs read/sec= 0.0817611 Average IOPs write/sec= 14.9651 2015-04-27--09:00 Average IOPs read/sec= 0.0434278 Average IOPs write/sec= 13.6037 2015-04-27--10:00 Average IOPs read/sec= 0.613706 Average IOPs write/sec= 14.9003 2015-04-27--11:00 Average IOPs read/sec= 0.0389833 Average IOPs write/sec= 13.9256 2015-04-27--12:00 2015-04-27--13:00 Average IOPs read/sec= 0.0642528 Average IOPs write/sec= 15.1321 Average IOPs read/sec= 0.144817 Average IOPs write/sec= 13.8244 2015-04-27--14:00 Average IOPs read/sec= 0.0384222 2015-04-27--15:00 Average IOPs write/sec= 13.0468 Average IOPs read/sec= 0.0312028 Average IOPs write/sec= 12.7255 2015-04-27--16:00 Average IOPs read/sec= 0.0781472 Average IOPs write/sec= 13.7179 2015-04-27--17:00 Average IOPs read/sec= 0.0798139 Average IOPs write/sec= 15.9144 2015-04-27--18:00 Average IOPs read/sec= 0.138147 Average IOPs write/sec= 13.7297 2015-04-27--19:00 Average IOPs read/sec= 0.0362028 Average IOPs write/sec= 13.2324 2015-04-27--20:00 Average IOPs read/sec= 0.254536 Average IOPs write/sec= 14.9013 2015-04-27--21:00 Average IOPs read/sec= 0.0314806 Average IOPs write/sec= 12.8527 2015-04-27--22:00 2015-04-27--23:00 Average IOPs read/sec= 21.6865 Average IOPs write/sec= 70.7389 

这是一个脚本执行和一个小时后执行的脚本之间的重叠。 有时候,新的执行写第一行之前,第一次执行写了最后两行。

前两行来自2015-04-26最后一次执行。 写入date是2015年4月27日,因为使用的日志文件是基于写入时的时间,而不是开始执行。

一个选项是将date和时间存储在variables中,并将所有三行同时写入正确的date文件中。