Запустите приложение wsgi из virtualenv в качестве системной службы Linux - PullRequest
3 голосов
/ 01 января 2011

Я сейчас разрабатываю бутылочное приложение в virtualenv.Я намереваюсь обслужить его, используя bjoern WSGI server (но это, вероятно, не имеет большого значения).Я также собираюсь обслуживать приложение с помощью легкого обратного прокси или nginx.В любом случае, можно ли запустить приложение изнутри своего собственного virtualenv в качестве системной службы?И если да, то как можно это сделать?

1 Ответ

4 голосов
/ 08 января 2011

Судя по моему опыту, я могу использовать Supervisord для запуска своего веб-сервера в качестве службы демона. Хотя вы можете написать несколько сценариев службы Linux в /etc/init.d, но их действительно сложно сделать правильно. Вот пример сценария init.d для nginx для запуска его в качестве службы в Ubuntu. Вы не хотите писать, не так ли?

Чтобы запустить сервер Python, который зависит от virtualenv в качестве службы демона с супервизором, вот конфигурация, которую я использую в производственной среде.

[program:web01]
command=/home/victorlin/tg2env/bin/paster serve production.ini ;
process_name=%(program_name)s ;
directory=/home/victorlin/ ;
user=victorlin ;
priority=999 ;
redirect_stderr=true ;
stdout_logfile=/home/victorlin/logs/web01_out.txt ;
stderr_logfile=/home/victorlin/logs/web01_err.txt ;
environment=PYTHON_EGG_CACHE=/home/victorlin/.python-eggs ;

Вы можете использовать / path / to / virtualenv / bin / python, чтобы запустить собственный скрипт python в поле команды. И чтобы запустить супервизор при запуске, вы можете написать crontab следующим образом в своей учетной записи root:

@reboot /usr/local/bin/supervisord -c /home/root/supervisord.conf 

Конечно, если у вас нет номеров портов ниже 1024 для открытия, вы можете записать этот стартовый crontab в непривилегированную учетную запись.

...