2016-01-21 55 views
-1

有人可以告诉我这个脚本有什么问题,它不起作用。当我运行它时,屏幕上没有输出/错误。监控脚本不输出任何东西

脚本是监视一个日志文件来检查其中一列的值,如果它超过20则会回显一条消息。

#!/bin/bash 

while true ; do 

COUNT=`tail -f /monitoring/log.20160121|cut -d" " -f39` 

echo $COUNT 

if [ $COUNT -gt 20 ] ;then 

echo "Count is high" 

break 

fi 

sleep 10 

done 
+0

我只是计算出COUNT ='tail -f /monitoring/log.20160121|cut -d“”-f39'有问题,但不知道如何解决 – Unixhelp

+0

那么,如果你键入'tail -f/monitoring/log .20160121'在交互式shell中? –

+0

我可以问你是否看过这篇文章的编辑? –

回答

3

tail -f不会退出,所以您的脚本卡在那里。我假设你只是对日志的最后一行感兴趣; tail -n 1这样做。

其他景点:

  • 缩进:不知道有多少迷路了,而复制粘贴,但适当的缩进大量增加代码的可读性
  • 变量名:所有大写变量名都望而却步因为它们可能与保留的(环境)变量名称冲突
  • 带反引号(` `)的命令替换 is discourag ed和形式$()是优选的;使得例如筑巢容易
  • 既然你使用bash,您可以使用(())条件结构,比[ ]

一起更适合比较数字:

#!/bin/bash 

while true; do 
    count=$(tail -n 1 /monitoring/log.20160121 | cut -d " " -f 39) 

    echo $count 

    if ((count > 20)); then 
     echo "Count is high" 
     break 
    fi 

    sleep 10 

done 
+0

感谢Benjamin对你的专家意见,这将有所帮助。但尾巴-n,脚本只是在检查最后一行后退出,但我想持续监视这个日志文件 – Unixhelp

+0

@Unixhelp那么,它会检查日志文件的最后一行每十秒,如果字段39大于20,则跳出while循环。它不应该从文件读取后退出。 –