Назад | Перейти на главную страницу

Как запустить процесс как демон?

Я создал службу, которая состоит из веб-интерфейса (nginx), обработчика клея для бегуна на python (uwsgi) и моего собственного кода на Python (сборщик). Я создал сценарий (deploy.sh) для запуска сервисов разницы:

nginx
uwsgi --ini inifie.ini
python fetcher.py & disown

У меня вопрос относительно того, как я запускаю своего демона python. Я хочу, чтобы он работал в фоновом режиме. Он не должен ничего выводить на мой текущий терминал. Если я добавляю вызовы print в свой сценарий сборщика, я вижу их в окне терминала.

Итак, у меня вопрос: как мне запустить мой скрипт fetcher.py как демон?

Использовать питон-демон упаковка или использование DAEMON Tools.

Пожалуйста, также смотрите Управление процессом.

Вы хотите сделать это из сценария оболочки или из программы Python?

Если из сценария оболочки, это довольно просто:

nohup fetcher.py >/dev/null 2>&1 </dev/null & disown

Если вы хотите сделать это из программы Python, я предлагаю вам изучить использование модуль python-daemon, также, вероятно, доступен как готовый пакет для вашей любимой Unix-подобной ОС.

Я часто делаю такой форк в программе на Python:

if __name__ == '__main__':
    try:
        pid = os.fork()
        if pid > 0:
            sys.exit(0)
    except OSError:
        report( "unable to fork: %s" % sys.exc_info()[1])
        raise
    [program starts here ]

Простое решение: nohup

nohup myprogram > myprogram.log &

supervisord работает хорошо, и можно доверять отправку предупреждений о сбоях