2011-09-30 90 views
0

我有这个脚本检查文件newlog.log的最后一行,如果它在那里发现字Stream closed它应该运行程序test.jar,因为它会停止并因此写入Stream closed在日志文件中。用于检查日志和运行程序的Shell脚本

#!/bin/sh 
SUCCESS=0 
while (true); 
do 
sleep 5 
tail -1 ~newlog.log | grep -q "Stream closed" . 
if [$? -eq 1] 
then 
java -jar test.jar & 
fi 
done 

我得到的错误是:

run.sh: 11: [1: not found 

请告诉我,如果有一些语法错误还是什么?

+0

1个明显的错误是使用'睡眠5' d'尾巴-1'在一起。如果同一个日志文件多次更新会怎么样?你不会总是在最后找到“流关闭”。不知道你的设计,但请记住这一点:)。同时在你的条件中添加适当的“空格”,以修复错误。 –

回答

0

我认为你可以使用

tail -f file.log 
0

而不是使用grep命令的退出状态的,存储在一个变量和循环输出,直到它的长度为非零。

即使没有返回任何输出,Grep也会返回退出状态0。

VAR1 = tail -1 ~newlog.log | grep -q "Stream closed"

直到[-n “$ {VAR1}”];

echo "Sleeping for next 5 seconds" 

    sleep 5 

java -jar test.jar & 
0

原来的错误所造成的OP不把周围的方括号空间if语句 '[1'。

看来,tail命令将返回1. 的退出代码if语句应该是

if [ $? -eq 1 ] 
then 

...

if [$? -eq 1] 
then 

。 ...