从虚拟环境中以Linux系统服务启动wsgi应用
我现在正在虚拟环境中开发一个瓶子应用(bottle app)。我打算用bjoern这个WSGI服务器来运行它(不过这可能没什么太大关系)。我还想用lighttpd或者nginx作为反向代理来提供这个应用。总之,这个应用能不能在它自己的虚拟环境里作为系统服务运行?如果可以的话,应该怎么做呢?
1 个回答
4
根据我的经验,我建议你可以使用Supervisord来把你的网页服务器当成一个后台服务来运行。虽然你可以在/etc/init.d目录下写一些Linux服务脚本,但其实这些脚本写起来真的很复杂,很容易出错。这里有一个nginx的init.d脚本示例,可以在Ubuntu上把它作为服务运行。你可不想自己写一个吧?
如果你想用Supervisord把一个依赖于virtualenv的Python服务器作为后台服务运行,这里有我在生产环境中使用的配置。
[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脚本,放在命令字段里。而且,如果你想让supervisord在启动时自动运行,你可以在你的根账户下写一个这样的crontab:
@reboot /usr/local/bin/supervisord -c /home/root/supervisord.conf
当然,如果你没有需要打开的低于1024的端口号,你也可以在一个普通账户下写这个启动的crontab。