配置基于 virtualenv 的 supervisor

2014年8月23日

本文写于 2014 年,面向当时常见的 Python 2.x 系统环境与 virtualenv。如今更常见的是 venv / Poetry / uv 等工具链,配置项名称请以当前 supervisor 文档为准。

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

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

安装配置 virtualenv

推荐直接用 pip 安装:

pip install virtualenv

如果系统未安装 pip,可从 PyPI virtualenv 下载对应版本的源码包后安装,例如:

curl -O https://files.pythonhosted.org/packages/source/v/virtualenv/virtualenv-20.26.2.tar.gz
tar xvfz virtualenv-20.26.2.tar.gz
cd virtualenv-20.26.2
python setup.py install

(版本号请按发布时的最新版替换。)

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

virtualenv ENV
cd ENV
source bin/activate

安装配置 supervisor

pip install supervisor

Ubuntu Server 上可直接 apt-get 安装:

sudo apt-get install supervisor

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

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_logfile=/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_logfile=/var/log/example.com/err.log

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

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

重载 supervisor 里的任务可运行:

supervisorctl restart tornado

评论

0 条讨论

后即可评论与回复。

还没有评论,来抢沙发吧。