Класс записи Python не работает при отправке stdout в /dev/null

У меня есть сценарий Python 3 с включенным ведением журнала (для целей отладки). Всякий раз, когда я запускаю / выполняю этот скрипт, он работает нормально, и создаются файлы журнала.

Я также создал скрипт setup.sh-bash для загрузки и установки моего приложения. Затем он автоматически запускает сценарий с помощью nohup, чтобы запустить его в фоновом режиме. За этой командой следуют> /dev/null 2>&1 &, поэтому она ничего не выводит на консоль. Тем не менее, это "вызывает" модуль регистрации в Python, так как он больше не может выводить что-то в файлы журнала. Он выводит в / dev / null, если я прав.

Я искал в Интернете, чтобы найти решение, но у меня не получилось с каждой попытки. Я надеюсь, что кто-то может придумать идею к этому. Может быть, я должен использовать что-то еще, чтобы мой скрипт работал вечно (конечно, до перезагрузки:)) с возможностью использовать модуль регистрации Python 3 и не иметь вывода в консоли.

Точная команда, которую я использую для запуска моего скрипта, выглядит следующим образом:

su -l -s /bin/bash scriptuser -c 'nohup python3 '/etc/scriptroot/main.py > /dev/null 2>&1 &'

заранее спасибо

2 ответа

Решение

Мне очень жаль говорить, что я сам нашел решение. Кажется, я недостаточно глубоко копал. Сейчас я использую daemon-start-stop, поддерживаемый большинством систем UNIX, и он работает как надо.

Я следовал за учебником в Интернете, который можно найти здесь: http://blog.scphillips.com/2013/07/getting-a-python-script-to-run-in-the-background-as-a-service-on-boot/

Я надеюсь, что это помогает многим другим пользователям, имеющим такую ​​же проблему / ищущим тот же ответ.

Спасибо за чтение.

Эта проблема возникает из-за буферизации стандартного вывода Python. Если вы запустите команду с флагом -u, она будет использовать небуферизованные stdout и stderr:

su -l -s /bin/bash scriptuser -c 'nohup python3 -u '/etc/scriptroot/main.py > /dev/null 2>&1 &'

Другие вопросы по тегам