【问题标题】:automatically retrieve results of bsub自动检索 bsub 的结果
【发布时间】:2015-07-13 15:27:10
【问题描述】:

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

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 

但是我有点担心被注销等问题以及脚本在作业完成之前终止。

有人有什么建议吗?

我本质上想要一个界面(未来的网站),用户可以在其中提交文件,远程分析文件,在工作开始/完成时向用户发送电子邮件,结果自动检索回本地/网络服务器,用户收到电子邮件说他们可以拿到结果。

不过一步一步来!

【问题讨论】:

  • 如果执行节点可以访问共享存储,您可以在作业脚本中进行复制。如果您的集群管理员不希望您在执行 I/O 任务时占用 cpu,您可以将文件复制为 post exec command(例如 bsub -Ep)。如果执行节点无权访问合适的共享存储,LSF 有一个特性到copy the output back to the submission node
  • 如果系统安装了 LSF 平台数据管理器,您可以从作业中暂存数据。

标签: php bash hpc slurm lsf


【解决方案1】:

您可以将结果目录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

【讨论】:

  • 对不起@meuh - 我正在努力让它工作。我可以看到我能够创建 /tmp/a 和 tmp/b ,其中它们包含“hello”和“magic”这两个词。但是,在 LSF 中,可以选择从程序中通过电子邮件发送 StdOut。您是说可以将程序创建的结果目录 tar,将其嵌入到 StdOut 以便通过电子邮件发送,然后从客户端解压缩结果以检索结果目录?
  • 原则上是可以的。显然,将内容导入电子邮件程序将受到该程序愿意传递的内容、大小和内容的限制。您可能需要通过base64 或类似的编码器对 tar 的二进制输出进行编码。如果数据太多,它可能会截断它。
【解决方案2】:

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

引用documentation:

-K

提交作业并等待作业完成。发送消息 提交作业时向终端“等待调度”。发送 作业完成后向终端发送消息“作业已完成”。如果 LSB_SUBK_SHOW_EXEC_HOST 在 lsf.conf 中启用,也发送消息 “Starting on execution_host”当作业开始在 执行主机。

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

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

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

您还可以在包装脚本前加上 nohup 以防止它在会话注销时被终止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2015-03-04
    • 2020-02-06
    • 2011-03-27
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多