在没有实际作业文件的情况下提交qsub作业的语法?

时间:2013-11-21 17:20:27

标签: python sungridengine qsub pbs

我想在不创建离散作业文件的情况下即时提交qsub作业。所以,假设我有一个名为“get_time.py”的python脚本,它只是报告时间。而不是像这样制作提交脚本:

cat>job.sub<<eof
    #PBS -l walltime=1:00:00
    cd $PBS_O_WORKDIR
    get_time.py
eof

...然后提交作业:qsub job.sub

我希望能够绕过文件创建步骤,并且我将构建的图像是这样的:     qsub -d . -e get_time.py

其中-e是我的虚构参数,它告诉qsub以下是要发送给调度程序的代码,而不是使用离散的提交文件。

我疯了吗?似乎应该有一个简单的解决方案,但我无法在任何地方找到它。谢谢你的任何建议!

5 个答案:

答案 0 :(得分:3)

如果你可以在HERE文档中编写你的工作,就像在你的例子中一样,你可以将这个HERE文档直接传递给qsub而不需要临时文件:

qsub <<eof
    #PBS -l walltime=1:00:00
    cd \$PBS_O_WORKDIR
    get_time.py
eof

另请注意,您需要在$PBS_O_WORKDIR中转义美元符号,否则在提交作业之前会对其进行插值,最后会以空字符串结束。

答案 1 :(得分:2)

在提供了所有选项(qsub等)后,您可以将任何可执行脚本/文件的名称传递给-d .。脚本名称后面的任何参数都被视为该脚本的参数。例如,如果我有脚本test.py:

#!/usr/bin/python
from sys import argv
script, param = argv
print param

然后我可以运行

qsub test.py 2

,我日志的输出将为2

需要注意的两件重要事项:

  1. 您的Python脚本必须是可执行的(例如chmod +x test.py)。
  2. 您的Python脚本必须有一个shebang(例如#!/usr/bin/python)。

答案 2 :(得分:1)

如果get_time.py是可执行的,且shebang是正确的,那么你应该可以简单地运行

qsub -d . get_time.py

如果由于任何原因失败,您可以使用以下构造

qsub -d . <<< "python get_time.py"

答案 3 :(得分:1)

我不明白这个问题,但......

echo 'date' | qsub

对你不好?

答案 4 :(得分:1)

在网格引擎中,-b y指定要执行的事物是二进制文件,而不是脚本:

qsub -b y get_time.py