我正在寻找一些一般性建议而不是编码解决方案.基本上,当通过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.我想我可以有一个脚本,它使用睡眠并设置为工作时间(可能有点徘徊只是为了安全),类似于
#!/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
但是我有点担心被注销等,并且脚本在作业完成之前终止.
有没有人有什么建议?
我本质上希望有一个界面(未来的网站),用户可以提交文件,远程分析文件,用户在工作开始/结束时发送电子邮件,结果自动检索回本地/网络服务器,用户收到电子邮件说他们可以选择他们的结果.
虽然一步一步!
最佳答案 您可以将结果目录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