2015-07-13 3 views
4

Я ищу некоторые общие рекомендации, а не решение для кодирования. В основном при подаче на работе через bsub я могу получить журнал в STDIN/STDOUT, указав одно из следующих действий:автоматически извлекает результаты bsub

bsub -o log.txt  % sends StdOut to log.txt 
bsub -u [email protected]  % sends StdOut to email 

они оба являются большими, но моя программа создает папку, когда представленный bsub и хранятся на удаленный сервер. по существу, я хочу

а) получить папку и его содержимое б) делают это автоматически, когда работа заканчивается

, чтобы я мог технически к используя scp -r, однако я должен был бы сделать это вручную. не так уж плохо, если я получу уведомление по электронной почте, когда работа закончена, но все же - мне придется вручную это сделать.

так на б):

ну я не вижу какой-либо специальный флаг для bsub, чтобы извлечь фактические результаты, только STDOUT. Я полагаю я мог бы иметь скрипт, который использует sleep и наборы для времени работы (возможно, немного задержаться на всякий случай), что-то вроде

#!/bin/bash 

scp myfile.txt server:main/subfolder 
ssh bsub < myprogram.sh -u [email protected] 
sleep <job-time> 
scp -r server:main/subfolder result_folder 

однако я немного обеспокоен выход из системы и т.д., и завершение сценария до завершения задания.

есть ли у кого-нибудь предложения?

Я по сути хочу иметь интерфейс (сайт в будущем), где пользователь может отправить файл, файл анализируется удаленно, пользователю отправляются электронные письма при запуске/завершении работы, результаты автоматически возвращаются на локальный/веб-сервер, пользователь получает электронную почту говоря, что они могут подобрать свои результаты.

один шаг за раз, хотя!

+0

Если узлы выполнения имеют доступ к общему хранилищу, вы можете сделать копию внутри сценария задания. Если администратор кластера не хочет, чтобы вы выполняли процессор при выполнении задачи ввода-вывода, вы можете сделать копию файла как команду [post exec] (http://www-01.ibm.com/support/knowledgecenter /SSETD4_9.1.3/lsf_admin/pre_post_exec_commands.dita) (например, bsub -Ep). Если узел выполнения не имеет доступа к соответствующему совместно используемому хранилищу, LSF имеет функцию [копировать выход обратно в узел представления] (http://www-01.ibm.com/support/knowledgecenter/SSETD4_9.1.3/ lsf_users_guide/non_shared_about.dita). –

+2

Если в системе установлен диспетчер данных платформы для LSF, вы можете выполнить вывод данных из заданий. –

ответ

1

Вы можете указать tar каталог результатов в stdout, в свой файл журнала. Затем деактивируйте файл журнала для извлечения каталога.

Добавьте команду tar czf - ... в конец вашего скрипта.

Если у вас есть другие вещи, появляющиеся на stdout, сначала переместите их в stderr, или выполните эхо некоторой уникальной строки перед tar, grep для нее и tar оттуда. Вот своего рода тест принципа:

marker='#magic' # some unique string 
log=/tmp/b # your logfile 
echo 'test' >/tmp/a # just something to tar for this test 

# -- in your script, at end -- 
# echo "$marker"; tar cf - /tmp/a 
# -- equivalent in this test: 
(echo 'hello'; echo "$marker"; tar cf - /tmp/a) >$log 

# -- to recover the tar -- 
start=$(grep -ab "$marker" <$log | awk -F: '{print 1+$1+length($2)}') 
dd skip=1 bs=$start <$log | 
tar tvf - # use tar x really 
+0

sorry @meuh - Я пытаюсь заставить это работать. Я вижу, что я могу создать/tmp/a и tmp/b, в которых они содержат слова «привет» и «магия». Однако в LSF есть возможность отправлять по электронной почте StdOut из программы. ARe вы говорите, что можно создать каталог результатов, созданный программой, вставить его в StdOut, чтобы он получал электронную почту, а затем распаковывать результаты с клиентской стороны для получения каталога результатов? – brucezepplin

+0

в принципе можно. очевидно, что передача сообщений в программу электронной почты будет ограничена тем, что эта программа готова передать, по размеру и содержанию. Вам может потребоваться кодировать двоичный вывод tar через 'base64' или аналогичный кодер. И если будет слишком много данных, это, вероятно, усечет его. – meuh

1

Вы можете отправить работу в блокирующем режиме (bsub -K). Это возвращает команду bsub только тогда, когда задание завершено или обнаружена ошибка.

Цитата documentation:

Отправляет работу и ждет задания для завершения. Отправляет сообщение «Ожидание отправки» на терминал при отправке задания. Отправляет сообщение «Работа завершена» на терминал, когда задание выполнено. Если в lsf включен LSB_SUBK_SHOW_EXEC_HOST.conf, также отправляет сообщение «Запуск на исполнение_host», когда задание запускается на хосте выполнения .

Вы не можете отправить другое задание до завершения задания. Это полезно, когда требуется завершить работу, например в качестве скрипта задания. Если задание необходимо повторить из-за переходных ошибок , bsub возвращается после успешного завершения работы. bsub выдает с тем же кодом выхода, что и задание, чтобы сценарии работы могли принимать соответствующие действия на основе кодов выхода. bsub выходит со значением 126 , если задание было прекращено в ожидании.

Вы не можете использовать опцию -K с параметрами -I, -Ip или -Is.

Далее вы можете запустить scp или аналогичную программу, чтобы автоматически копировать результаты с удаленного хоста без проверки вашей электронной почты. :)

Вы также можете прикрепить свой сценарий оболочки nohup, чтобы он не погиб, если сеанс выходит из системы.

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