我正在使用代码基本上运行一次完成后重新启动计算。代码工作正常。但我想即兴创作代码。现在它运行在计时器功能睡眠。它永远不会检查文件的结尾。所以它等待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
答案 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秒。