我很难弄清楚为什么我不能使用LSF blaunch
命令并行启动命令:
for num in `seq 3`; do
blaunch -u JobHost ./cmd_${num}.sh &
done
错误讯息:
Oct 29 13:08:55 2011 18887 3 7.04 lsb_launch(): Failed while executing tasks.
Oct 29 13:08:55 2011 18885 3 7.04 lsb_launch(): Failed while executing tasks.
Oct 29 13:08:55 2011 18884 3 7.04 lsb_launch(): Failed while executing tasks.
删除&符号(&
)允许命令按顺序执行,但我是在并行执行之后。
答案 0 :(得分:1)
在bsub的上下文中执行时,blaunch -u <hostfile> <cmd>
的单个调用将花费<cmd>
并在<hostfile>
中指定的所有主机上并行运行它,只要这些主机在工作的分配。
您尝试做的是使用blaunch
的3个单独调用来运行3个单独的命令。我无法在文档中找到它,但只是对最近版本的LSF进行的一些测试表明,在这样的作业中,每个单独执行的任务都在一个名为LSF_PM_TASKID的环境变量中为其存储了一个唯一的任务ID。您可以通过运行以下内容在您的LSF版本中验证这一点:
blaunch -I -n <num_tasks> blaunch env | grep TASKID
现在,这与你的问题有什么关系?您希望通过./cmd_$i.sh
并行运行blaunch
i = 1,2,3。为此,您可以编写一个我将调用cmd.sh
的脚本,如下所示:
#!/bin/sh
./cmd_${LSF_PM_TASKID}.sh
现在你可以用blaunch
的单个调用替换你的for循环,如下所示:
blaunch -u JobHost cmd.sh
这将在文件&#39; JobHost&#39;中列出的每个主机上运行cmd.sh
的一个实例。 并行,每个实例都将运行shell脚本cmd_X.sh
,其中X
是该特定任务的$LSF_PM_TASKID
值。
如果&#39; JobHost&#39;中有3个主机名然后,您将获得3个cmd.sh
个实例,这些实例将导致cmd_1.sh
,cmd_2.sh
和cmd_3.sh
答案 1 :(得分:0)
你试过nohup
吗?这可能有效:
for num in `seq 3`; do
nohup blaunch -u JobHost ./cmd_${num}.sh &>/dev/null &
done
答案 2 :(得分:0)
blaunch
不能在bsub
提供的作业执行环境之外使用。我不知道如何处理为每个进程运行不同的命令,但尝试类似:
bsub -n 3 blaunch ./cmd.sh