Запуск webapp2 вне appengine, как запустить его как сервис / deamon? - PullRequest
5 голосов
/ 11 августа 2011

Я только что закончил свое приложение и хотел бы развернуть его. Но как запустить мое приложение в качестве службы / демона?

Поиск в Google показал несколько разных подходов с использованием некоторых библиотек python, twisted и Можно ли запустить скрипт Python как службу? . Но не могу понять, как это сделать.

Кто-нибудь сделал это? Есть ли подход наилучшей практики?

.. Фредрик

Ответы [ 3 ]

4 голосов
/ 11 августа 2011

Если вы хотите, чтобы ваше приложение работало автономно (если я правильно понял), вы можете справиться с этим, как и с любым другим (не веб-приложением).

Если вы просто хотите, чтобы ваша программа работала в фоновом режиме, вы можете прочитать этот рецепт , в котором объясняется, как создать приложение демона, и есть хорошее обсуждение этой темы (в комментариях).

С другой стороны, если вы хотите создать «системный демон» с вашим приложением (которое запускается при каждом запуске системы), я бы пошел со сценарием оболочки. Чтобы узнать, как создавать сценарии запуска для вашей системы, вы можете получить вдохновение от других сценариев запуска на вашем компьютере. Решением было бы запустить вашу программу в фоновом режиме с помощью python my_app.py & (из сценария запуска), а затем использовать переменную $!, чтобы получить pid процесса и сохранить его в файле, таким образом, вы также сможете чтобы остановить ваш процесс, прочитав «pid-файл» и воспользовавшись командой kill (отправка SIGINT вашему процессу вызовет исключение KeyboardInterrupt, которое будет вызываться в вашем приложении).

EDIT:

В ваших комментариях к вопросу вы говорите, что использование python main.py & было бы небезопасно, так как приложение не перезапустилось бы, если бы оно отказало / зависло, но то же самое с любым другим демоном в вашей системе (например, если произошел сбой Apache, не перезагружал бы сам по себе). Если вы хотите перезапустить приложение в случае сбоя, вам нужно написать 2-го демона, который будет проверять через регулярные промежутки времени, если ваше приложение все еще работает, и перезапускать его при необходимости.

Что касается ведения журнала, вы можете либо сделать вывод вашего приложения на stdout/stderr и перенаправить его из сценария запуска (python main.py &> /path/to/app.log &), либо обработать ведение журнала из вашего приложения, используя модуль logging .

2 голосов
/ 17 августа 2011

Кроме того, вы можете легко запускать и контролировать деамонизированный процесс с помощью supervisord и регистрировать его вывод stdout / stderr.

1 голос
/ 10 октября 2011

Демонизация скрипта Python на самом деле демонизация Python.

Если вы являетесь пользователем root, рассмотрите возможность использования экрана GNU для этой работы. Сам Screen будет обрабатывать управление терминалом, что обычно является наиболее сложной задачей для построения процесса демона.

Запустите экран, запустите вашу программу, отсоединитесь, а затем выйдите из системы, если хотите, и это оставит процесс, похожий на демон. Этот подход эффективен, особенно когда ваша программа находится в стадии разработки, не очень стабильна или выдает много быстро написанных сообщений для отладки.

Тем не менее, при демонизации программы следует отметить некоторые вещи, такие как изменение рабочего каталога на / и закрытие дескрипторов, которые не используются, в случае необходимости размонтировать файловую систему, или перепрограммировать дескрипторы сигналов, и т. Д. Однако большинство условий выполняются, если вы демонизируете процесс из init или сеанса чистого входа в систему; просто не забудьте изменить каталог на "/", обычно достаточно.

Но использование экрана не помогает пережить сбой, программистам всегда приходится иметь дело со сбоями.

...