将子流程日志挂接到Docker中的主日志输出

将子流程日志挂接到Docker中的主日志输出,docker,sungridengine,Docker,Sungridengine,我正在Docker容器中运行SGE(Sun Grid Engine),以便复制我们的实时SGE集群。如果您没有运行过它,那么SGE基本上是一个运行其他程序的程序(同时跨集群管理资源,即网格调度器)。这当然与docker的“每个容器一个进程”的理念相冲突(如果你沿着这条推理路径走得够远,你会想“为什么要使用网格调度器,而不仅仅是将docker容器粘贴在Swarm或Kubernetes或其他东西上?”,你是对的,只是遗憾的是,我无法改变我们的整个调度基础设施来解决这个问题) 所以,我正试图从SGE运

我正在Docker容器中运行SGE(Sun Grid Engine),以便复制我们的实时SGE集群。如果您没有运行过它,那么SGE基本上是一个运行其他程序的程序(同时跨集群管理资源,即网格调度器)。这当然与docker的“每个容器一个进程”的理念相冲突(如果你沿着这条推理路径走得够远,你会想“为什么要使用网格调度器,而不仅仅是将docker容器粘贴在Swarm或Kubernetes或其他东西上?”,你是对的,只是遗憾的是,我无法改变我们的整个调度基础设施来解决这个问题)

所以,我正试图从SGE运行的那些程序中获取日志,并将其放入通用docker日志中。qsub命令(将作业提交到SGE队列以供运行)使用参数,这些参数允许您指定STDOUT和STDERR的位置

到目前为止,我管理的最佳尝试是通过一个永不终止的脚本(good old tail-f/dev/null)启动两个主要进程(sge_execd和sge_qmaster),然后执行以下操作:

qsub -o /proc/1/fd/1 -e /proc/1/fd/2 my_script
这个骇人听闻的黑客正在钩住进程1(即我们的tail-f-ing,sge调用进程)的文件描述符,正如您所料,它的STDOUT和STDERR恰好连接到docker日志

不过这感觉很恶心。有人能提出一个更好的方法来实现这一点吗