2013-08-22 2 views
1

У меня есть куча заданий для отправки в очередь PBS, и вывод должен быть после этого обработан локально после этого. Поскольку задания похожи (и я не хочу его вручную менять часто), я написал сценарий bash, который локально создает сценарий задания PBS и затем отправляет задание. Мой вопрос следующий: Как я могу сделать мой сценарий bash до тех пор, пока задание PBS не закончится, а затем начнется пост-обработка? (Постоянная проверка состояния задания не является вариантом.) Какие возможности я могу сделать для этого?Запуск сценария PBS и выход после обработки в сценарии bash

Благодарим вас за советы и рекомендации!

Edit: Как указано в комментарии (спасибо), некоторые правки:

  • PBS = Portable Batch System
  • Документация доступна здесь: http://resources.altair.com/pbs/documentation/support/PBSProUserGuide12.1.pdf
  • Я думал о возможных решениях и придумал следующий, который не сработает, хотя: я мог бы, чтобы мой скрипт bash ожидал времени, которое запрашивалось в качестве настенного времени работы. Тем не менее, есть две сложности: во-первых, задание может не понадобиться столько времени и раньше заканчиваться, поэтому наличие сценария bash слишком долгое; во-вторых, задание может быть поставлено в очередь и не выполнено сразу, поэтому сценарий bash, вероятно, слишком мало ждать.

Edit 2: Поскольку я не уверен, если я всегда могу работать в интерактивном режиме, как это предлагается ниже, я подумал о следующем: У меня есть работа сценарий PBS создать (пустой файл) только до окончания. Мой скрипт bash проверяет каждую пару минут (скажем), существует ли этот файл (используя цикл while). Если он существует, я знаю, что работа завершена и может начать пост-обработку, удалив только что созданный (пустой) файл. Таким образом, у меня есть только отсрочка на пару минут максимум и на самом деле не нужны какие-либо ресурсы. Это определенно не идеальный, но вроде обходной путь. Любые идеи, которые являются более практичными, высоко ценятся.

Любая мысль оценена, даже если она напрямую не связана с PBS.

Кари

+0

Попробуйте добавить ссылку к документации для 'pbs' (в США, что означает общественную систему вещания). Обратите внимание, что для 'pbs' всего 18 последователей, поэтому это, вероятно, не широко понятная технология. Тем не менее, С. О. не является бесплатной услугой кодирования, вы должны попытаться решить вашу проблему и опубликовать этот код (правильно отформатированный) в своем вопросе. Удачи. – shellter

ответ

0

Я не верю, что PBSPro поддерживает это, но TORQUE (другое производное PBS) имеет параметр -x, что вы могли бы быть заинтересованы в Вы можете представить работу, как это:.

qsub -I -x <executable> 

Это будет работать в интерактивном режиме и запускать исполняемый файл со всем выходом, направленным на ваш терминал, и задание будет выполняться, как только этот исполняемый файл завершится. Тогда вы можете начать пост-обработку. PBSPro может иметь аналогичную функциональность, но то, что я здесь описал, относится к TORQUE.

+0

Спасибо! Это звучит очень полезно не только для вышеупомянутой проблемы. Однако я не уверен, могу ли я всегда работать в интерактивном режиме. Я обязательно посмотрю! –

0

Это связано с an answer I wrote to a different question. У меня есть доступ к нескольким машинам в высокопроизводительном вычислительном центре нашего кампуса. По крайней мере в одном из кластеров разрешено вызывать qsub из родительского сценария PBS. Это позволяет осуществлять цепочки заданий, как описано в разделе this page. Таким образом, вы можете быть в состоянии использовать решение как следующий скелет:

# ...do your PBS stuff 
# launch your code on the cluster that creates, say "JOBID.txt" 
parallel -j0 mycode.sh 

# you may need to use PBS environment variables to figure out what your output file is called 
filename=$${PBS_JOBID%%.*}.txt # e.g., this would be like the JOBID.txt I wrote above 

# next, use qsub to launch the post-processing script 
echo "${PBS_O_WORKDIR}/postprocess.pbs $filename" | qsub 

posprocess.pbs бы имя файла для обработки в качестве аргумента. В ответе, с которым я связался, это помогло мне скопировать стандартный выходной файл PBS в другой файл после завершения.Тем не менее, я не уверен, что о возможных условиях гонки, и вы, возможно, придется использовать опцию -W depend= qsub, что-то вроде этого (не проверено):

echo "-W depend=afterok:$PBS_JOBID postprocess.pbs $filename" | qsub