У меня есть унаследованный научный код, работающий на кластере Rocks, с SGE. У меня есть сценарий подачи задания на конкретный сценарий, который генерирует сценарии qsub (т. Е. Сценарий, который берет и запускает Sun Grid Engine).Устранение неполадок SIGTERM с тройником на кластере в рамках заданий SGE
В скрипте qsub вызывается мое устаревшее приложение. Это приложение отправляет его в STDOUT. SGE перехватывает STDOUT и направляет его в файл в домашнем каталоге пользователей, поэтому пользователь может видеть, как результаты собираются в реальном времени. Я хочу, чтобы это поведение поддерживалось, но в то же время я хочу прозрачно регистрировать весь вывод в фоновом режиме. Я решил, что тройка будет идеальной для достижения этого.
Поэтому я изменил сценарий подчинения задания, чтобы запустить приложение и передать STDOUT на tee, что сохраняет STDOUT в файл, который копируется в центральное хранилище после завершения задания. Приложение запускается и поступает в тройнике следующим образом:
\$GMSCOMMAND | tee \$SCRATCHDIR/gamess_output.log
Проблема заключается в том, с тех пор, как я начал конвейер кода тройника, приложение было умирающими с SIGTERMs, особенно когда я прошу несколько узлов. Я попытался использовать параметр -i (игнорировать прерывания) с помощью tee: это не имеет никакого значения.
Все отлично работает, если я перенаправляю вывод приложения в файл, затем загружаю файл после завершения приложения, но затем я не могу позволить пользователям просматривать результаты в реальном времени (что является важным требованием).
Любые идеи о том, почему это использование тройника может быть неудачным? Или, альтернативно, какие-либо идеи о том, как еще я могу достичь желаемой функциональности?
Не могли бы вы попробовать заменить команду 'tee' на' cat' - чтобы увидеть, есть ли проблема в этом трубе? –
Вы уверены, что это SIGTERM, а не SIGPIPE? Попробуйте установить strace -o tr.gms. $ SGE_JOBID для отслеживания системных вызовов и сигналов. Возможно, проследите как $ GMSCOMMAND, так и tee. –