Cron 用于记录LSF(bsub)作业完成情况的脚本
我有一个cron调用的脚本来运行LSF作业 我想知道该作业何时提交,何时完成。权力机构已决定禁用电子邮件通知。因此,我编写这个脚本是为了将相关信息输出到日志文件 它几乎起作用了。下面是一些代码: crontab:Cron 用于记录LSF(bsub)作业完成情况的脚本,cron,heredoc,lsf,Cron,Heredoc,Lsf,我有一个cron调用的脚本来运行LSF作业 我想知道该作业何时提交,何时完成。权力机构已决定禁用电子邮件通知。因此,我编写这个脚本是为了将相关信息输出到日志文件 它几乎起作用了。下面是一些代码: crontab: 00 12 * * * my_script.sh my_job.bsub #!/bin/bash #BSUB -q my_queue #BSUB -W 06:00 echo "I am a long process" sleep 60 #!/bin/sh BSUB_SCRIPT
00 12 * * * my_script.sh my_job.bsub
#!/bin/bash
#BSUB -q my_queue
#BSUB -W 06:00
echo "I am a long process"
sleep 60
#!/bin/sh
BSUB_SCRIPT=$1
# run bsub_script (and get the LSF job id while you're at it)...
JOB_ID=`bsub < $BSUB_SCRIPT | awk -F[\<,\>] '{print $2}'`
# log that job was submitted...
echo "`date +%Y-%m%d %T` submitted '$BSUB_SCRIPT' [$JOB_ID]" >> $HOME/my_logfile.txt
# and log when job completes...
bsub -w "ended($JOB_ID)" << EOF
#!/bin/bash
#BSUB -q my_queue
#BSUB -W 00:30
echo "`date +%Y-%m-%d %T` completed '$BSUB_SCRIPT' [$JOB_ID]" >> $HOME/my_logfile.txt
EOF
2018-01-30 13:15:14 submitted 'my_job.bsub' [1234567]
2018-01-30 13:15:14 completed 'my_job.bsub' [1234567]
我的工作。b订阅:
00 12 * * * my_script.sh my_job.bsub
#!/bin/bash
#BSUB -q my_queue
#BSUB -W 06:00
echo "I am a long process"
sleep 60
#!/bin/sh
BSUB_SCRIPT=$1
# run bsub_script (and get the LSF job id while you're at it)...
JOB_ID=`bsub < $BSUB_SCRIPT | awk -F[\<,\>] '{print $2}'`
# log that job was submitted...
echo "`date +%Y-%m%d %T` submitted '$BSUB_SCRIPT' [$JOB_ID]" >> $HOME/my_logfile.txt
# and log when job completes...
bsub -w "ended($JOB_ID)" << EOF
#!/bin/bash
#BSUB -q my_queue
#BSUB -W 00:30
echo "`date +%Y-%m-%d %T` completed '$BSUB_SCRIPT' [$JOB_ID]" >> $HOME/my_logfile.txt
EOF
2018-01-30 13:15:14 submitted 'my_job.bsub' [1234567]
2018-01-30 13:15:14 completed 'my_job.bsub' [1234567]
我的脚本。sh:
00 12 * * * my_script.sh my_job.bsub
#!/bin/bash
#BSUB -q my_queue
#BSUB -W 06:00
echo "I am a long process"
sleep 60
#!/bin/sh
BSUB_SCRIPT=$1
# run bsub_script (and get the LSF job id while you're at it)...
JOB_ID=`bsub < $BSUB_SCRIPT | awk -F[\<,\>] '{print $2}'`
# log that job was submitted...
echo "`date +%Y-%m%d %T` submitted '$BSUB_SCRIPT' [$JOB_ID]" >> $HOME/my_logfile.txt
# and log when job completes...
bsub -w "ended($JOB_ID)" << EOF
#!/bin/bash
#BSUB -q my_queue
#BSUB -W 00:30
echo "`date +%Y-%m-%d %T` completed '$BSUB_SCRIPT' [$JOB_ID]" >> $HOME/my_logfile.txt
EOF
2018-01-30 13:15:14 submitted 'my_job.bsub' [1234567]
2018-01-30 13:15:14 completed 'my_job.bsub' [1234567]
请注意时间是如何完全相同的
如何确保在LSF作业运行之前推迟对heredoc内容的评估?heredoc中的
date
命令在传递到bsub
之前正在展开。您需要在herdoc表达式中引用EOF
,或转义date
命令。请参见此问题的答案:
“猫是我的习惯,一旦我问了我的问题,答案就来了:我可以用两个脚本来完成它。因此,最终的bsub行将类似于:
bsub-w”end($JOB_ID)“my_other_script.sh”completed“$bsub_script”[$JOB_ID]“
该脚本将调用日期并输出到日志文件。谢谢。这为我指明了正确的方向。因为我在heredoc中使用了其他脚本变量,所以我没有引用“EOF”并按如下方式转义“date”函数:echo“\$(date+%Y-%m-%d%T)completed'$BSUB\u script'[$JOB\u ID]”>>$HOME/my\u logfile.txt
您的答案仍然是正确的。当然,我也更新了答案以包含该解决方案。