我有一些在 Rocks 集群上运行的遗留科学代码,使用 SGE。我有一个特定于应用程序的作业提交脚本,它生成 qsub 脚本(即 Sun Grid Engine 采用并运行的脚本)。
在 qsub 脚本中,我的旧版应用程序被调用。此应用程序将其输出发送到 STDOUT。SGE 截获 STDOUT 并将其假脱机到用户主目录中的一个文件中,因此用户可以实时查看结果。我希望保持这种行为,但同时,我想在后台透明地记录所有输出。我认为 tee 非常适合实现这一目标。
所以我修改了作业提交脚本以运行应用程序并将 STDOUT 传输到 tee,它将 STDOUT 保存到一个文件中,一旦作业完成,该文件就会复制到中央存储中。该应用程序运行并通过管道传输到 tee,如下所示:
\$GMSCOMMAND | tee \$SCRATCHDIR/gamess_output.log
问题是,自从我开始将代码传送到 tee 后,该应用程序一直因 SIGTERM 而死,尤其是当我请求多个节点时。我尝试将 -i(忽略中断)参数与 tee 一起使用:它没有区别。
如果我将应用程序输出重定向到一个文件,然后在应用程序完成后对文件进行 cat 处理,那么一切正常,但是我不能让用户实时查看结果累积(这是一个重要的要求)。
关于为什么使用 tee 可能会失败的任何想法?或者,关于我如何实现所需功能的任何想法?