背景
当我们在linux环境下进行开发时,很多时候我们需要在后台运行python的脚本,比较通用的方式是nohup命令结合&可以实现程序的后台运行,但是这种方式有两个缺点,一是对于大型项目的维护是很不友好的,无法进行统一的管理。二是该种方式无法自动重启进程。Supervisor可以很好的解决以上的问题。
初识supervisor
supervisor介绍
supervisor是用python开发的一款用于linux操作系统的进程管理工具,supervisor可以高效地实现对进程状态的监控及统一管理。
supervisor组成
supervisor分为supervisord(服务端)和supervisorctl(客户端)两部分。
supervisord作为服务端负责所有的注册进程的启动及监控,出现崩溃的服务时会自动重启。
supervisorctl是客户端,可以实现对子进程的管理,如启动、停止、重启等。
supervisor的使用
安装
pip install supervisor
配置文件
使用echo_supervisord_conf > /etc/supervisord.conf生成配置文件到指定路径
配置文件中一个program代表一个进程,如下是关键配置:
[program:program_name] # 进程名
command=python3 /home/aaaa/bbbb/task.py # 启动命令
注意program_name是唯一的,用于区分进程
配置文件实例
[program:MQtask]
command=python3 /home/task.py
process_name=%(program_name)s
stdout_logfile=/home/task.log
stderr_logfile=/home/task.log
导入外部配置文件
可以使用引入外部配置的方式方便管理多个进程,将所有的进程进程配置放在supervisord.d目录中。
[include]
files = /etc/supervisord.d/*.conf
supervisor启动
使用supervisord启用并指定配置文件位置
supervisord -c /etc/supervisor.conf
supervisorctl的使用
supervisorctl可以管理supervisord的进程,命令如下:
supervisorctl status # 查看进程状态
supervisorctl start program_name # 启动program_name进程
supervisorctl stop program_name # 终止program_name进程
supervisorctl restart program_name # 重启program_name进程
supervisorctl reread # 更新配置,根据最新的配置启动所有程序
supervisorctl update # 更新配置,重启配置有变化的进程