允许 TORQUE 中的 qsub 等待作业完成的 Bash 脚本,非常类似于 SGE 系统中的 -sync y

标签 bash qsub torque

我正在使用带有 Torque/Maui 系统的集群。我有一个 bash 脚本,它使用 qsub 命令提交一个作业,然后做几件事,比如移动文件、写入 ASCII 文件,并检查我提交的作业的输出。关于这个输出,基本上,如果它包含数字 1,则需要再次提交作业。如果与 1 不同,bash 脚本会执行其他操作。

问题是 qsub 在后台运行,所有的 bash 都是一次性计算的。我想强制 qsub 的行为与 awk、cat、sort 等非常相似......当脚本在这些命令完成后进一步运行时 - 如果不放在后台。

所以,我需要让 bash 在第一个 qsub 停止,并在 qsub 完成后继续运行,这意味着,当作业完成时。有什么办法吗?它将类似于:

   -sync y    # in the SGE system, for instance.

我有什么:

#!/bin/bash
.
.
some commands
.
.
qsub my_application  # need to wait until my_application get done
.
.
more commands
.
.
my_application_output=(`cat my_application_output.txt`)

case "$my_application_output" in
["1"])
     qsub my_application
     ;;
["0"])
     some commands
     ;;
["100"])
     some commands
     ;;
*)
     some commands
     exit 1

esac

.
.

一些评论


  • 不方便使用:qsub -I -x,一旦我想将输出保留在输出文件上;并且不想通过启动交互模式 (-I) 来锁定节点
  • 我猜这不是一个简单的工作依赖问题,一旦重新提交 1) 可能发生,2) 不能,最重要的是,如果发生 (1),它可以多次提交。

谢谢大家

最佳答案

Quim 10 月 3 日 4:05:“这不是一个简单的工作依赖性问题”

您必须创建一个简单的作业依赖性问题——无论如何简单到足以让您的脚本处理。事实上,您的脚本控制在 my_application_output.txt 上,所以为什么不在上面 sleep 呢?像

#!/usr/bin/env bash
# I prefer to have constants at the top
my_application_output_fp='/path/to/my_application_output.txt' 
#
#
# some commands
#
#
qsub my_application
#
#
# more commands
#
#

# sleep until my_application outputs
while [[ ! -r "${my_application_output_fp}" ]] ; do
    sleep 1
done

my_application_output="$(cat ${my_application_output_fp})"
# process it

如果 my_application_output.txtmy_application 结束之前写入太长,更改 my_application 以在之前写入标志文件它退出,然后进入:

#!/usr/bin/env bash
my_application_flag_fp='/path/to/my_application_flag.txt' 
my_application_output_fp='/path/to/my_application_output.txt' 
#
#
# some commands
#
#
qsub my_application
#
#
# more commands
#
#

# sleep until my_application writes flag
while [[ ! -r "${my_application_flag_fp}" ]] ; do
    sleep 1
done

if [[ ! -r "${my_application_output_fp}" ]] ; then
    # handle error
fi
# else
my_application_output="$(cat ${my_application_output_fp})"
# process it

关于允许 TORQUE 中的 qsub 等待作业完成的 Bash 脚本,非常类似于 SGE 系统中的 -sync y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26173141/

相关文章:

hadoop - 为什么每次都需要source bash_profile

python - 分组和删除文件

linux - 即使网站在线,Ping 也返回错误

cluster-computing - 在集群上测试 MPI

linux - 在函数中创建一个目录,然后将路径作为字符串返回给 Bash 中的调用者

batch-processing - PBS 作业相互依赖 : one job starts, 取消其他

pbs - 了解 qsub 中的 -t 选项

bash - 直接给pbs脚本传参

parallel-processing - PBS,刷新标准输出