Php 自动检索bsub的结果

Php 自动检索bsub的结果,php,bash,hpc,slurm,lsf,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) 作业完成后自动执行此操作 因此,从技术上讲,

我在寻找一些一般性的建议,而不是编码解决方案。基本上,当通过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 
#/bin/bash
scp myfile.txt服务器:主/子文件夹
ssh bsub
然而,我有点担心被注销等和脚本终止之前的工作完成

有人有什么建议吗

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


一步一个脚印

您可以将结果目录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
marker='#magic'#一些唯一的字符串
log=/tmp/b#您的日志文件
echo'test'>/tmp/a#这只是测试的一部分
#——在你的剧本的结尾--
#回音“$marker”;焦油cf-/tmp/a
#--本试验中的等效值:
(echo'hello';echo“$marker”;tar cf-/tmp/a)>$log
#--回收焦油--

start=$(grep-ab“$marker”您可以在阻塞模式(bsub-K)下提交作业。这使得
bsub
命令仅在作业完成或发现错误时返回

引自:

-K

提交作业并等待作业完成。发送消息 提交作业时,向终端发送“等待分派”。发送 作业完成时,向终端发送消息“作业已完成”。如果 lsf.conf中启用了LSB_SUBK_SHOW_EXEC_HOST,也会发送消息 当作业开始在主机上运行时,“在主机上开始执行” 执行主机

在作业完成之前,您无法提交其他作业。 这在需要继续完成作业时非常有用,例如 作为作业脚本。如果由于临时原因需要重新运行作业 失败,作业成功完成后bsub返回。bsub退出 使用与作业相同的退出代码,以便作业脚本可以 基于退出代码的适当操作。bsub以值126退出 如果作业在挂起时终止

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

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


您还可以在包装器脚本前面加前缀,以防止会话注销时终止它。

如果执行节点可以访问共享存储,您可以在作业脚本中进行复制。如果您的集群管理员不希望您在执行I/O任务时占用cpu,那么您可以将文件复制为(例如bsub-Ep)。如果执行节点无法访问合适的共享存储,则LSF将具有一项功能。如果系统已安装针对LSF的Platform Data Manager,则可以从作业中分期输出数据。抱歉@meuh-我正在尝试使其正常工作。我可以看到我能够创建/tmp/a和tmp/b,其中包含单词“hello”和“magic”。然而,在LSF中,有一个选项可以通过电子邮件从程序发送StdOut。你是说可以对程序创建的结果目录进行tar,将其嵌入StdOut以便发送电子邮件,然后从客户端取消对结果的tar以检索结果目录吗?原则上是可能的。显然,将信息传送到电子邮件程序将受到该程序愿意传递的内容的限制,包括大小和内容。您可能需要通过
base64
或类似的编码器对tar的二进制输出进行编码。如果有太多的数据,它可能会截断它。