我正在使用代码基本运行以重新启动计算。该代码工作正常。但是我想即兴创造代码。现在,它在计时器功能睡眠上运行。它永远不会检查文件的末尾。因此,无论上一份工作如何,它等待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
尝试以下:
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
读取最后两行(如果在"程序的结束"之后有newline,则实际上是最后一行。您可能需要将其调整为系统上的-n 1。)
如果我把你做对了,那么这样的一环可能会帮助您:
stop=0
while [ $stop == 0 ]; do
tail -1 $LOGFILE | grep -q "End of program" && stop=1 || sleep 60
done
(它检查搜索文本的存在的LogFile的最后一行(tail -1
),停止 如果找到文字或睡觉60秒,则为)。