后台运行时进程未记录

时间:2019-04-22 15:03:49

标签: shell docker process sh ash

我想在docker容器(ubuntu:18.04图片)中运行此命令:

(cd inse/; sh start.sh > log.txt 2>&1 ;) &

但是当我运行它时,它不会将其记录到log.txt。当我这样运行时:

(cd inse/; sh start.sh > log.txt 2>&1 ;)

它锁定了前景(应该这样做),当我杀死它时,我看到log.txt文件中充满了日志内容,这意味着它可以正常工作。

为什么会发生这种情况?

start.sh的内容是:

#!/usr/bin/env sh
. venv/bin/activate;
python3 main.py;

更新:

实际上,该命令不是容器的入口点,我在另一个外壳中运行它,而是在一个长时间运行的容器(测试容器)中运行。

使用nohup不会成功:

(cd inse/; nohup sh start.sh | tee log.txt;) &

我认为这个问题是指在()中使用sh的subshel​​l概念。似乎在后台运行时不会让输出到任何地方。

更新2:

即使这不起作用:

sh -c "cd inse/; sh start.sh > log.txt 2>&1 &"

更新3:

甚至没有:

sh -c "cd inse/; sh start.sh > log.txt 2>&1;" &

2 个答案:

答案 0 :(得分:0)

尝试使用此命令,请检查对创建log.txt的文件夹具有完全访问权限。使用Dockerfile中的CMD / RUN步骤运行start.sh。

CMD /inse/start.sh> log.txt 2>&1;

OR

RUN /inse/start.sh> log.txt 2>&1;

答案 1 :(得分:0)

我找到了引起问题的原因。 它被缓冲了python输出。此问题是由python引起的。

我应该使用python无缓冲输出:

python -u blahblah