2013-11-21 2 views
2

Я хотел бы отправить задания qsub на лету без создания дискретных файлов заданий. Итак, скажем, у меня есть скрипт python под названием «get_time.py», который просто сообщает время. Вместо того, чтобы сценарий представления, как это:Синтаксис для отправки задания qsub без фактического файла задания?

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 следующий код, который будет отправлено в планировщик, вместо того чтобы использовать дискретный файл представления.

Я сошел с ума? Похоже, что для этого уже должно быть простое решение, но я не мог найти его нигде. Спасибо за любые предложения!

ответ

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).
+1

Это то, что я думал. Тем не менее, у меня есть скрипт python, который имеет разрешения -rwxr-xr-x и строку shebang '#!/Usr/bin/env python2.7' и qsub не работает для' qsub -N test_script -o logs -e logs - V -cwd/path/to/script.py'. Как это исправить? – Arjun

+0

да, не работает для меня ни на OGS/GE 2011.11p1 – cbare

1

условии get_time.py является исполняемым, а притон правильно, вы должны быть в состоянии просто запустить

qsub -d . get_time.py 

Если это не по любой причине, вы можете использовать следующие построения

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

Версия PBS 'PBSPro_12.1.1.131502' делает nit, похоже, знает параметр' -d'. – oarfish

1

Я не понимаю вопроса, но ...

echo 'date' | qsub 

не работает хорошо для вас?

2

Если вы хорошо с написанием вашей работы в ТУТ документе, как в вашем примере, вы можете передать, что здесь документ непосредственно qsub без временного файла:

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

отметить также, что вам нужно бежать знак доллара в $PBS_O_WORKDIR, иначе он будет интерполирован перед отправкой задания и заканчивается как пустая строка.

+0

любая идея как передать аргументы сценария таким образом также? Если я делаю 'qsub $ arg1 << eof', я получаю ошибку, так как qsub пытается оценить' arg1', как если бы это был входной файл, а синтаксис '-' не работает, например. 'qsub - $ arg1 << eof' – user5359531

+0

Вы можете поместить любой код в документ ЗДЕСЬ. Просто поставьте arg1 после get_time.py. –

+0

Правильно, но это не работает для конкретных элементов qsub, таких как '$ NSLOTS', которых нет до тех пор, пока qsub не запустится; он получает оценку пустой переменной heredoc. Однако я обошел это, избегая его в heredoc; '\ $ NSLOTS'. Вы также можете избежать строки файла, чтобы предотвратить все расширения, например. '<< "EOF"'. http://tldp.org/LDP/abs/html/here-docs.html – user5359531

1

В сетке двигателя, -b у определяет, что вещь должна быть выполнена двоичная, а не сценарий:

qsub -b y get_time.py 
+0

Это верно только для Sun Grid Engine. Опция '-b' означает что-то еще в кластерах TOURQUE. См. Страницу qsub man для получения дополнительной информации [ссылка] (http://linux.die.net/man/1/qsub-torque) – macKaiver

Смежные вопросы