配置基于 virtualenv 的 supervisor

supervisor 是基于 python 的任务管理工具,用来自动运行各种后台任务,当然你也能直接利用 nohup 命令使任务自动后台运行,但如果要重启任务,每次都自己手动 kill 掉任务进程,这样很繁琐,而且一旦程序错误导致进程退出的话,系统也无法自动重载任务。

virtualenv 是 python 的一个虚拟环境管理工具,用来部署运行不同的 python 版本,很多 linux 发行版本的 python 都是 2.x,例如要运行 3.x 版本的 python 程序,如果直接升级系统的 python 版本的话,由于 python 3.x 无法向前兼容 2.x 版本会造成系统依赖失效。

安装配置 virtualenv

Terminal window
pip install virtualenv

如果系统未安装 pip,可直接从源文件安装,记得用当前最新版本号代替 X.X

Terminal window
curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-X.X.tar.gz
tar xvfz virtualenv-X.X.tar.gz
cd virtualenv-X.X
python setup.py install

在项目目录下通过以下命令初始化和激活虚拟环境

Terminal window
virtualenv ENV
cd ENV
source bin/activate

安装配置 supervisor

Terminal window
pip install supervisor

ubuntu server 上可直接 apt-get 安装

Terminal window
sudo apt-get install supervisor

通过以下命令生成 supervisor 示例配置文件

Terminal window
echo_supervisord_conf > /etc/supervisord.conf

修改 supervisord.conf 文件,通过添加 [program:name] 来新建一个任务,例如:

[program:tornado]
directory=/home/user/website/example.com
command=python server.py
autorestart=true
stdout_logfile=/var/log/example.com/out.log
stderr_log=/var/log/example.com/err.log

但我们利用了 virtualenv 来生成了不同的虚拟环境,这里的 command 直接是 python server.py 的肯定是会出错的,所以我们需要改成这样:

[program:tornado]
directory=/home/user/website/example.com
command=/home/user/website/example.com/ENV/bin/python server.py
autorestart=true
stdout_logfile=/var/log/example.com/out.log
stderr_log=/var/log/example.com/err.log

接下来运行以下命令运动 supervisor 服务:

Terminal window
supervisord -c /etc/supervisord.conf
supervisorctl start tornado

重载 supervisor 里的任务可运行:

Terminal window
supervisorctl restart tornado

上一篇

前端中间件实践和代码部署

下一篇

Javascript 闭包