Cron 用于记录LSF(bsub)作业完成情况的脚本

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

我有一个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=$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
您的答案仍然是正确的。当然,我也更新了答案以包含该解决方案。