我想在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
的subshell概念。似乎在后台运行时不会让输出到任何地方。
即使这不起作用:
sh -c "cd inse/; sh start.sh > log.txt 2>&1 &"
甚至没有:
sh -c "cd inse/; sh start.sh > log.txt 2>&1;" &
答案 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