我在Docker容器中运行SGE(Sun Grid Engine)以复制我们的实时SGE群集。如果你还没有遇到它,SGE基本上是一个运行其他程序的程序(同时管理集群中的资源 - 即网格调度程序)。这当然与docker"每个容器一个进程冲突"哲学(如果你按照这种推理路径走得太远,你会想到"为什么要使用网格调度程序,而不是仅仅在Swarm或Kubernetes上粘贴docker容器或者其他东西",并且你' d是的,只有我无法改变整个调度基础设施来解决这个问题,遗憾的是。
所以,我试图从SGE运行的程序中获取日志并进入常规docker日志。 qsub命令(将作业提交到SGE队列以便运行)接受参数,允许您指定STDOUT和STDERR的位置。
我到目前为止所做的最好的尝试是通过一个永远不会终止的脚本(旧的tail -f / dev / null)启动两个主要进程(sge_execd和sge_qmaster),然后执行如下操作:
qsub -o /proc/1/fd/1 -e /proc/1/fd/2 my_script
这个可怕的黑客正在进入进程1的文件描述符(即我们的tail -fing,sge-invoking进程),正如你所料,它恰好将STDOUT和STDERR连接到docker日志。 / p> 但是,这感觉非常讨厌。有人可以提出一个更好的方法来实现这个目标吗?