计时器检查文件bash shell的结尾

时间:2014-01-27 17:09:19

标签: linux bash shell

我正在使用代码基本上运行一次完成后重新启动计算。代码工作正常。但我想即兴创作代码。现在它运行在计时器功能睡眠。它永远不会检查文件的结尾。所以它等待22分钟提交下一份工作而不管以前的工作。所以我想以这样的方式更改代码,它每隔一分钟检查一次文件的结尾,从日志文件中检索关键字“程序结束”并提​​交下一个作业。如果你有任何想法,请给我一个消息......


while(1)


#sleep X秒/分钟

    $SLEEP 22m
    #cut JobID into peeces:
    #e.g.: 31380.chic1i20.informatik.tu-chemnitz.de Info: Your job definition is checked against CHiC policies. --> 31380.chic1i20
    #set JOBnr = `echo $JOBID | $CUT -c-15`
    set JOBnr = `echo $JOBID | $CUT -d " " -f1 | $CUT -d "." -f-2`
    $QSTAT -nu "$USER" > .qstat_outfile
    if ( "$?" ) then
            echo "autorestart: qstat error"
            $CAT .qstat_outfile
            continue
    endif

2 个答案:

答案 0 :(得分:0)

试试这个:

UNWRITTEN=0
while [ $UNWRITTEN -eq 0 ]; do
 token=$(tail -n 2 .qstat_outfile)
 echo $token
 if [[ $token == "End of program" ]]
 then
     echo "autorestart..."
     UNWRITTEN=1
 fi
 sleep 60
done

说明:

  • 程序不断循环,直到在日志文件末尾找到正确的行。然后它重新开始计算并退出。
  • tail -n 2读取最后两行(如果在“程序结束”之后有换行符,则实际上是最后行。您可能需要将此值调整为-n 1 on你的系统。)

答案 1 :(得分:0)

如果我说得对,像这样的while循环可以帮到你:

stop=0
while [ $stop == 0 ]; do 
    tail -1 $LOGFILE | grep -q "End of program" && stop=1 || sleep 60 
done

(它检查LOGFILE的最后一行(tail -1)是否存在您的搜索文本,停止  如果没有找到文本,或者如果没有,则休眠60秒。