我正在编写一个前端脚本,使用户能够简单地向 gridengine 集群提交和查询作业。具体来说,我们希望能够通过此脚本显示有关所有队列的信息,包括该队列中当前正在运行的作业的日志文件的名称。
我知道如何告诉 SGE/OGE 写入特定日志文件,但我们的日志文件通常在其路径中包含运行该作业的主机的名称(此 gridengine 系统正在安装到已经存在的系统中)。因此,我们不能在提交时构造日志文件名,而是在作业在执行节点上启动时构造日志文件名。
我们想要做的是获取该日志文件路径并以某种方式将其与作业关联,以便 SGE 知道它并可以通过 qstat 或 qacct 将其显示给我们。有没有办法将日志文件名填充到 qstat 可以访问的某个结构中?
我最初考虑通过 qalter 为该作业添加一个环境变量,但如果我正确理解了文档的话,我需要在这种情况下终止并重新提交该作业,因为 qalter 仅适用于待处理作业。
答案1
哇,我想我没有读足够多的手册页。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 \*”获取所有信息
目前我还不清楚我可以在该字段中存储哪些类型的信息,但它似乎适用于将日志文件放回作业记录的情况。