我想在不创建离散作业文件的情况下即时提交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以下是要发送给调度程序的代码,而不是使用离散的提交文件。
答案 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
。
需要注意的两件重要事项:
chmod +x test.py
)。#!/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