从虚拟环境中以Linux系统服务启动wsgi应用

4 投票
1 回答
2250 浏览
提问于 2025-04-16 09:15

我现在正在虚拟环境中开发一个瓶子应用(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。

撰写回答