来自shell脚本的后台运行的进程没有输出

时间:2016-12-15 21:43:09

标签: python linux bash shell

我写了一个小脚本来测试docker容器中的一些服务器。

#!/bin/bash
echo started
python /opt/server.py &
nginx -g 'daemon off;'

python服务器会写一些我们需要查看的信息,但是当我运行docker run -P image或运行docker run -dP image并使用docker日志检查时它不会显示。

python服务器使用printsys.stdout.write。两者都没有出现 我尝试重定向输出python /opt/server.py >&1和/ dev / stdout。都没有奏效。来自nginx的日志很好。 docker image将访问日志符号链接到/ dev / stdout。

我查看了/ proc /#/ fd / 1中每个进程运行的所有进程并且它们都指向同一个管道

来自ls的

l-wx------ 1 root root 64 Dec 15 21:18 1 -> pipe:[28195]

我不确定如何使这个工作。

1 个答案:

答案 0 :(得分:0)

server.py看起来像这样吗?

import time
while True:
   print('something')
   time.sleep(1)

当您在容器内的while循环内打印和睡眠时,Python会做一些奇怪的事情。要使其正常工作,您需要手动刷新循环的打印语句:

import time
import sys
while True:
   print('something')
   sys.stdout.flush()
   time.sleep(1)