3

我想在不创建离散作业文件的情况下即时提交 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 以下是要发送到调度程序的代码,而不是使用离散的提交文件。

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

4

5 回答 5

4

如果您可以在 HERE 文档中编写工作,如您的示例中所示,您可以将该 HERE 文档直接传递给 qsub,而无需临时文件:

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

另请注意,您需要转义美元符号,$PBS_O_WORKDIR否则它将在提交作业之前被插值并最终成为一个空字符串。

于 2013-11-21T18:21:23.563 回答
3

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)。
于 2013-11-21T17:35:57.670 回答
3

在 Grid Engine 中,-by 指定要执行的东西是二进制文件,而不是脚本:

qsub -b y get_time.py
于 2016-03-04T16:57:35.083 回答
1

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

echo 'date' | qsub

不适合你吗?

于 2013-11-21T17:45:03.153 回答
0

只要get_time.py是可执行的,而且shebang是正确的,你应该可以简单地运行

qsub -d . get_time.py

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

qsub -d . <<< "python get_time.py"
于 2013-11-21T17:36:46.377 回答