自动检索bsub的结果

时间:2015-07-13 15:27:11

标签: php bash hpc slurm lsf

我正在寻找一些一般性建议而不是编码解决方案。基本上,当通过bsub提交作业时,我可以通过指定以下任何一项来检索Stdin / Stdout的日志:

bsub -o log.txt      % sends StdOut to log.txt
bsub -u me@email     % sends StdOut to email

这些都很棒,但我的程序在提交给bsub时会创建一个文件夹并存储在远程服务器上。基本上我想

a)检索文件夹及其内容 b)当工作完成时自动执行此操作

所以我在技术上可以使用scp -r,但是我必须手动执行此操作。如果我在工作完成时收到电子邮件提醒,那还不错 - 但仍然 - 我必须手动执行此操作。

所以进入b):

好吧,我无法看到任何特殊的标志让bsub回复实际结果,只有StdOut。我假设我可以有一个使用sleep的脚本并设置为工作时间(可能有点徘徊只是为了安全),类似

#!/bin/bash

scp myfile.txt server:main/subfolder
ssh bsub < myprogram.sh -u my@email
sleep <job-time>
scp -r server:main/subfolder result_folder 

然而,我有点担心被注销等,并且脚本在作业完成之前终止。

有没有人有任何建议?

我本质上希望有一个界面(将来的网站),用户可以提交文件,远程分析文件,用户在作业开始/结束时发送电子邮件,结果自动检索回本地/网络服务器,用户收到电子邮件说他们可以拿起他们的结果。

一次一步!

2 个答案:

答案 0 :(得分:1)

您可以将结果目录tar转到stdout ,放入日志文件中。 然后取消tar日志文件以检索目录。

tar czf - ...命令添加到脚本的末尾。

如果您首先在stdout上出现其他内容,请将其移至stderr,或者 在tar之前回显一些唯一的字符串,grep为它,从那里回复tar。 这是对原则的一种测试:

marker='#magic' # some unique string
log=/tmp/b # your logfile
echo 'test' >/tmp/a # just something to tar for this test

# -- in your script, at end --
#  echo "$marker"; tar cf - /tmp/a
# -- equivalent in this test:
(echo 'hello'; echo "$marker"; tar cf - /tmp/a) >$log

# -- to recover the tar --
start=$(grep -ab "$marker" <$log | awk -F: '{print 1+$1+length($2)}')
dd skip=1 bs=$start <$log |
tar tvf - # use tar x really

答案 1 :(得分:1)

您可以以阻止模式(bsub -K)提交作业。这使得bsub命令仅在作业完成或发现错误时返回。

引自documentation

  

-K

     

提交工作并等待工作完成。发送消息   提交作业时,“等待发送”到终端。发送   作业完成后,“作业已完成”消息到终端。如果   在lsf.conf中启用LSB_SUBK_SHOW_EXEC_HOST,也发送消息   当作业开始运行时,“从execution_host开始”   执行主持人。

     

在作业完成之前,您无法提交其他作业。   当需要完成作业时,这很有用   作为工作脚本。如果由于瞬态而需要重新运行作业   失败,bsub在作业成功完成后返回。 bsub退出   使用与作业相同的退出代码,以便作业脚本可以使用   基于退出代码的适当行动。 bsub以值126退出   如果作业在待定期间终止。

     

您不能将-K选项与-I,-Ip或-Is选项一起使用。

接下来,您可以运行scp或类似的程序,自动从远程主机复制结果,而不检查您的电子邮件。 :)

您还可以使用nohup为您的包装器脚本添加前缀,以防止在会话注销时将其杀死。