有的时候,我们只是需要一直启动Python的一个脚本,而不是Django服务或者Flask等web服务。
比如只是一个与定时有关的的脚本,每10s执行一次任务的脚本。
那么我们可以选择Supervisor来管理脚本。
这里我们用的是Ubuntu进行部署和安装,Ubuntu自带Python环境,可以用命令python3 --version
看看
命令如下
$ sudo apt-get install supervisor
安装完成之后在/etc/supervisor/
目录下生成配置文件和配置目录
$ ls
conf.d supervisord.conf
其中supervisord.conf
是配置文件,
其中有一行为
[include]
files = /etc/supervisor/conf.d/*.conf
会读取文件夹conf.d
内的conf
配置文件,即配置的每个进程。
这样,就是安装好了,之后等我们整理好环境,再把Python执行脚本配置进去了。
无论你的脚本是否有其他依赖,都建议在venv环境里面去执行。
提前整理好requirements.txt
文件,进入脚本所在根目录
$ virtualenv venv
// 创建虚拟环境
$ source venv/bin/acitvate
// 激活环境
(venv) pip install -r requirements.txt
// 下载好依赖
...
现在你有一个Python脚本,使用Supervisor管理起来,这个config文件就是告诉Supervisor如何启动脚本,以及脚本的日志输出在哪里。
则进入/etc/supervisor/conf.d/
目录,写一个自己的conf
文件
// 新建一个文件
sudo touch python-cron-task.conf
文件内容如下,我直接使用我正在用的。
; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
[program:python-cron-task-supervisor]
; 使用venv下的Python去启动脚本
command=venv/bin/python cron_watching_task.py
; 进入哪个目录执行command
directory=/home/datauser/cron_tasks
user=datauser
numprocs=1
autostart=true
autorestart=true
; logs目录提前创建好
stdout_logfile=/home/datauser/cron_tasks/logs/supervisor-out.log
stdout_logfile_backups=10
; 错误日志记得输出,这样启动如果报错容易看出来
stderr_logfile=/home/fanuser/cron_tasks/logs/supervisor-error.log
redirct_stderr=true
startsecs=10
stopasgroup=true
启动supervisor
sudo supervisord -c /etc/supervisor/supervisord.conf
使用supervisorctl
查看状态
datauser@datauser:/etc/supervisor$ sudo supervisorctl
[sudo] password for datauser:
java-kafka-pull-data-supervisor RUNNING pid 104503, uptime 0:30:01
python-cron-task-supervisor RUNNING pid 105328, uptime 0:09:15
python-kafka-save-data RUNNING pid 104504, uptime 0:30:01
supervisor> help # 查看哪些命令可以使用
default commands (type help ):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
supervisor> status # 查看当前状态
java-kafka-pull-data-supervisor RUNNING pid 104503, uptime 0:36:05
python-cron-task-supervisor RUNNING pid 105328, uptime 0:15:19
python-kafka-save-data RUNNING pid 104504, uptime 0:36:05
supervisor>
其他用过的命令解释
conf
文件,就可以执行这个命令去加载该conf,不影响旧有启动进程,再用status
查看在文件supervisord.conf
中配置以下代码,以使可以打开Supervisor的http管理页面
[inet_http_server]
port=0.0.0.0:9001
username=supervisor
password=123456
之后重启Supervisor,即可通过http://localhost:9001
访问页面,访问之前会需要输入密码。
如下,在管理页面可以停止、重启进程以及查看和清理日志