Если вы хотите, чтобы ваше приложение работало автономно (если я правильно понял), вы можете справиться с этим, как и с любым другим (не веб-приложением).
Если вы просто хотите, чтобы ваша программа работала в фоновом режиме, вы можете прочитать этот рецепт , в котором объясняется, как создать приложение демона, и есть хорошее обсуждение этой темы (в комментариях).
С другой стороны, если вы хотите создать «системный демон» с вашим приложением (которое запускается при каждом запуске системы), я бы пошел со сценарием оболочки. Чтобы узнать, как создавать сценарии запуска для вашей системы, вы можете получить вдохновение от других сценариев запуска на вашем компьютере. Решением было бы запустить вашу программу в фоновом режиме с помощью 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
.