процесс не регистрируется при запуске в качестве фона - PullRequest
1 голос
/ 22 апреля 2019

Я хочу выполнить эту команду внутри док-контейнера (ubuntu:18.04 image):

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

, но когда я ее запускаю, она не регистрирует ее как log.txt.Когда я запускаю его так:

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

Он блокирует forground (как и должно быть), а когда я его убиваю, я вижу, что файл log.txt заполнен журналами, что означает, что он работает правильно,

Почему происходит такое поведение?

Содержимое start.sh:

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

ОБНОВЛЕНИЕ:

На самом деле эта команда не является записьюточка контейнера, и я запускаю его внутри другой оболочки, но внутри долго работающего контейнера (тестирующего контейнера).

Использование с nohup, безуспешно:

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

Я думаю, что эта проблема связана с использованием () концепции subshell внутри sh.Кажется, он не позволяет выводить данные куда-либо при запуске в фоновом режиме.

ОБНОВЛЕНИЕ 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 голосов
/ 23 апреля 2019

Я нашел причину проблемы.
Это был буферизованный вывод Python. Эта проблема вызвана питоном.

Я должен был использовать вывод без буфера Python:

python -u blahblah
0 голосов
/ 23 апреля 2019

Попробуйте использовать эту команду и убедитесь, что у вас есть полный доступ к той папке, где создан log.txt. Используйте шаг CMD / RUN в Dockerfile для запуска start.sh.

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

ИЛИ

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

...