Я пишу интерфейсный скрипт, чтобы пользователи могли просто отправлять и запрашивать задания в кластере gridengine. В частности, мы хотим иметь возможность отображать с помощью этого сценария информацию обо всех очередях, включая имя файла журнала для текущего выполняемого задания в этой очереди.
Я вижу, как сообщить SGE / OGE о необходимости записи в определенный файл журнала, но в наших файлах журнала обычно указывается имя хоста, на котором выполнялось задание (эта система gridengine встраивается в уже существующую систему). Таким образом, мы не можем создать имя файла журнала во время отправки, а скорее во время запуска задания на узле выполнения.
Что мы хотели бы сделать, так это взять этот путь к файлу журнала и каким-то образом связать его с заданием, чтобы SGE знал об этом и мог отображать его нам через qstat или qacct. Есть ли способ вставить имя файла журнала в какую-либо структуру, к которой имеет доступ qstat?
Изначально я думал добавить env var в задание через qalter, но если я правильно понимаю документы, мне нужно будет убить и повторно отправить задание в этом случае, поскольку qalter работает только с ожидающими заданиями.
Вау, наверное, я недостаточно читал страницы руководства. Для qalter есть флаг -ac, который делает именно это.
В частности, в моем сценарии, который выполняется на узле выполнения, я могу сделать что-то вроде этого:
# compute logfile name
logfile=/my/path/to/logfiles/$queuename/$jobname.log
# send the logfile back to SGE via a context entry
qalter $JOB_ID -ac MYLOGFILE=$logfile
# now start the real job work
somecommand -with some -options
$ JOB_ID - одна из волшебных окружающих переменных, которые SGE вставляет в пространство процесса задания, выполняемого на исполнительных узлах. Контекстная информация будет отображаться с помощью команды 'qstat -j ID' или чтобы получить их все 'qstat -j \ *'
Мне пока не ясно, какую информацию я могу спрятать в этом поле, но, похоже, это работает в случае помещения файла журнала обратно в запись о вакансии.