crontab没有输出top命令

时间:2015-12-12 02:24:44

标签: bash shell unix

我只是shell脚本的初学者,并编写了一个运行top命令并清除输出的小脚本,只留下cpu ram和swap值。如果我手动运行脚本一切正常,但是当我安排脚本从/ etc / crontab每隔5分钟运行时,所有运行正常,但top命令的输出不会出现在日志中。

#############################

Sat Dec 12 02:05:00 GMT 2015

#############################

以下是脚本。有人可以帮助我让它发挥作用吗?

#!/bin/sh
echo "#############################" >> /var/tmp/TOPUSAGE.log
echo "" >> /var/tmp/TOPUSAGE.log
/bin/date >> /var/tmp/TOPUSAGE.log
/usr/bin/top -b -n 1 | /usr/bin/grep -E "Cpu|Mem|Swap|gis" >> /var/tmp/TOPUSAGE.log
echo "" >> /var/tmp/TOPUSAGE.log
echo "#############################" >> /var/tmp/TOPUSAGE.log

1 个答案:

答案 0 :(得分:0)

comment中,我说:

  

您应该使用exec>>在第一个回声之前的/var/tmp/TOPUSAGE.log,或者你应该在第一个回声之前使用{在一条线上并且}>> /var/tmp/TOPUSAGE.log在最后一个echo之后自己在一行上,在任何一种情况下都会丢失所有的中间>>重定向。

Live Com responded

  

我不明白你的回复。是否可以帮助纠正我粘贴的脚本。

原始脚本中的I / O重定向没有错。它只是冗长,重复,部分模糊了脚本的作用。

至少有三种备用重定向选项。

选项1 - 整个脚本重定向

#!/bin/sh
exec >> /var/tmp/TOPUSAGE.log
echo "#############################"
echo ""
/bin/date
/usr/bin/top -b -n 1 | /usr/bin/grep -E "Cpu|Mem|Swap|gis"
echo ""
echo "#############################"

选项2 - 部分脚本重定向

#!/bin/sh
{
echo "#############################"
echo ""
/bin/date
/usr/bin/top -b -n 1 | /usr/bin/grep -E "Cpu|Mem|Swap|gis"
echo ""
echo "#############################"
} >> /var/tmp/TOPUSAGE.log

选项1和2都避免重复。选项1更改了exec之后的整个脚本的标准输出状态(直到反击exec为止)。选项2将I / O重定向限制为大括号的范围 - 在本示例中,这是整个脚本,但这些可以在较大的脚本的一部分中起到良好的作用。请注意,大括号必须出现在命令可能出现的位置(大致在行的开头或分号后 - 或管道或和号)。

选项3 - 使用变量以避免重复文件名

如果保留重复,最好为文件名创建一个变量,这样就不会重复多次:

#!/bin/sh
log="/var/tmp/TOPUSAGE.log"
echo "#############################"                        >> "$log"
echo ""                                                     >> "$log"
/bin/date                                                   >> "$log"
/usr/bin/top -b -n 1 | /usr/bin/grep -E "Cpu|Mem|Swap|gis"  >> "$log"
echo ""                                                     >> "$log"
echo "#############################"                        >> "$log"