Класс записи 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 &'