Ubuntu安装和使用Supervisor管理Python脚本

1. 背景

有的时候,我们只是需要一直启动Python的一个脚本,而不是Django服务或者Flask等web服务。
比如只是一个与定时有关的的脚本,每10s执行一次任务的脚本。
那么我们可以选择Supervisor来管理脚本。
这里我们用的是Ubuntu进行部署和安装,Ubuntu自带Python环境,可以用命令python3 --version看看

2. 安装Supervisor

命令如下

$ 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执行脚本配置进去了。

3. Python脚本配置好venv环境

无论你的脚本是否有其他依赖,都建议在venv环境里面去执行。
提前整理好requirements.txt文件,进入脚本所在根目录

$ virtualenv venv
// 创建虚拟环境
$ source venv/bin/acitvate
// 激活环境
(venv) pip install -r requirements.txt
// 下载好依赖
...

4. 配置自己python脚本的conf文件

现在你有一个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

5. 启动或更新Supervisor

启动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 <topic>):
=====================================
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> 

其他用过的命令解释

  • reload 重新读取所有配置文件,重启所有进程
  • update 读取新的配置文件,比如新加了一个conf文件,就可以执行这个命令去加载该conf,不影响旧有启动进程,再用status查看

6.开启Supervisor的管理页面

在文件supervisord.conf中配置以下代码,以使可以打开Supervisor的http管理页面

[inet_http_server]
port=0.0.0.0:9001
username=supervisor
password=123456

之后重启Supervisor,即可通过http://localhost:9001访问页面,访问之前会需要输入密码。
如下,在管理页面可以停止、重启进程以及查看和清理日志
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值