将subprocess日志挂接到Docker的主日志输出中

我在Docker容器中运行SGE(Sun Grid Engine),以便复制我们的SGE集群。 如果你没有碰到它,SGE基本上是一个运行其他程序的程序(同时pipe理集群中的资源 – 即网格调度程序)。 这当然是与docker“每个容器一个进程”的哲学冲突(如果你遵循这个推理的path足够远,你会想“为什么使用网格调度,而不是只是在Swarm或Kubernetes上粘贴泊坞窗容器什么的“而且你说得对,只是我不能改变我们的整个调度基础设施来解决这个问题,可悲的是)。

所以,我试图从SGE运行的那些程序中取出日志,并把它们放到一般的docker日志中。 qsub命令(将作业提交到SGE队列中运行)需要使用参数来指定STDOUT和STDERR的位置。

迄今为止我所pipe理的最好的尝试是通过一个永不终止的脚本(好的旧的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日志。

虽然这感觉很肮脏。 有人可以提出一个更好的方法来实现这一点?