gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:06:31 24 4
gpt4 key购买 nike

我有一个由 cron 调用的脚本来运行 LSF 作业。

我想知道该作业何时提交以及何时完成。 The-Powers-That-Be 已决定禁用电子邮件通知。所以我正在编写这个脚本来将相关信息输出到日志文件。

几乎 有效。这是一些代码:

定时任务:

00 12 * * * my_script.sh my_job.bsub

我的工作.bsub:

#!/bin/bash
#BSUB -q my_queue
#BSUB -W 06:00

echo "I am a long process"
sleep 60

my_script.sh:

#!/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

(我发现 this answer 有助于弄清楚如何提交等待较早的作业完成的作业。)

问题是在 heredoc 中对 date 的第二次调用立即被评估,所以我最终得到一个如下所示的日志文件:

我的日志文件.txt:

2018-01-30 13:15:14 submitted 'my_job.bsub' [1234567]
2018-01-30 13:15:14 completed 'my_job.bsub' [1234567]

注意时间是如何完全相同的。

我如何确保将对 heredoc 内容的评估推迟到 LSF 作业运行?

最佳答案

heredoc 中的 date 命令在传递给 bsub 之前正在扩展。您需要在 heredoc 表达式中引用 EOF 或转义 date 命令。看到这个问题的答案: How does "cat << EOF" work in bash?

特别是:

The format of here-documents is:

      <<[-]word
here-document
delimiter

...

If word is unquoted, all lines of the here-document are subjected to parameter expansion, command substitution, and arithmetic expansion.

所以,例如当我运行时

$ cat << EOF
> echo `date`
> EOF

输出是

echo Tue Jan 30 11:57:32 EST 2018

请注意,date 命令已展开,这就是您的脚本中发生的情况。但是,如果我在 heredoc 中引用分隔符:

$ cat << "EOF"
> echo `date`
> EOF

你得到你想要的未扩展输出:

echo `date`

同样,转义日期会保留您要扩展的其他变量:

$ cat << EOF
> echo \$(date)
> EOF

输出:

echo $(date)

关于cron - 用于记录 LSF (bsub) 作业完成情况的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48522882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com