【发布时间】:2014-12-30 16:06:26
【问题描述】:
假设我有以下简单的 bash 脚本,我想通过 SLURM 提交到批处理服务器:
#!/bin/bash
#SBATCH -o "outFile"$1".txt"
#SBATCH -e "errFile"$1".txt"
hostname
exit 0
在这个脚本中,我只想将hostname 的输出写入我通过命令行控制其全名的文本文件,如下所示:
login-2:jobs$ sbatch -D `pwd` exampleJob.sh 1
Submitted batch job 203775
不幸的是,我的最后一个命令行参数 (1) 似乎没有通过 sbatch 解析,因为创建的文件没有我要查找的后缀,并且字符串“$1”是按字面意思解释的:
login-2:jobs$ ls
errFile$1.txt exampleJob.sh outFile$1.txt
我环顾了SO 和elsewhere 的地方,但运气不佳。本质上,我正在寻找相当于启用 Torque 的集群中的 qsub 实用程序的 -v 开关。
编辑:正如底层评论线程中所提到的,我以艰难的方式解决了我的问题:而不是让一个脚本多次提交到批处理服务器,每个脚本都有不同的命令行参数,我创建了一个“主脚本”,它简单地将相同的内容回显并重定向到不同的脚本,每个脚本的内容由传递的命令行参数更改。然后我通过sbatch 将所有这些提交到我的批处理服务器。但是,这并没有回答原始问题,因此我犹豫是否将其添加为我的问题的答案或将此问题标记为已解决。
【问题讨论】:
-
我不知道 SLURM。您能否将脚本简化为
touch outfile${1}.txt行,以便我们尝试重现错误并修复它? -
1 被传递给脚本,但不考虑文件名,因为 slurm 预处理文件以获取标志,但该变量应该在脚本中可用。你是如何在 Torque 上做到这一点的?
-
@WalterA:您的解决方案在
touch的情况下有效,也就是说,我通过sbatch传递的参数被脚本正确读取为$1。但是,在-o和-e的情况下,$1似乎是由sbatch逐字解析的,因此我最终会在磁盘上得到诸如outFile${1}.txt之类的文件。 @CarlesFenoy:我相信您所说的是正确的,因为 SLURM 会预处理文件以获取-o和-e标志(也请参阅上面我对 @WalterA 的回复)。在 Torque 中,您可以执行类似qsub -D 'pwd' -v var=1 script.sh和$var之类的操作,在script.sh中的值为 1。 -
我还应该提一下,我以艰难的方式解决了我的问题,也就是说,使用“主脚本”创建了一堆脚本,这些脚本简单地回显了许多内容行以反映所有不同的命令行我想传递给单个脚本的参数,然后通过
sbatch将它们全部提交到我的批处理服务器。但是,这并不能回答手头的问题,所以我犹豫将其添加为我自己对原始问题的回答。我还将在原始帖子中进行编辑以反映这一点。