Supervisorctl 详解:Linux 进程管理利器完全指南

Supervisorctl 详解:Linux 进程管理利器完全指南

什么是 Supervisor?

Supervisor 是一个用 Python 编写的客户端/服务器系统,允许用户监控和控制类 UNIX 操作系统上的多个进程。它在 Linux 和 macOS 等系统上广泛使用,特别适合管理后台进程、守护进程等。

主要特性

  • 进程监控:自动重启崩溃或异常退出的进程
  • 集中管理:通过统一的接口管理多个进程
  • 简单配置:使用 INI 风格的配置文件
  • Web界面:提供可选的 Web 管理界面
  • 事件通知:支持事件通知机制

安装 Supervisor

Ubuntu/Debian

sudo apt-get update
sudo apt-get install supervisor

CentOS/RHEL

sudo yum install supervisor
# 或者对于较新版本
sudo dnf install supervisor

使用 pip 安装

pip install supervisor

基础配置文件

主配置文件

Supervisor 的主配置文件通常位于:

  • /etc/supervisor/supervisord.conf (Ubuntu/Debian)
  • /etc/supervisord.conf (CentOS/RHEL)

程序配置文件

程序配置可以放在:

  • /etc/supervisor/conf.d/ 目录下
  • 在主配置文件中通过 [include] 节指定

编写程序配置

创建一个示例程序配置 /etc/supervisor/conf.d/myapp.conf

[program:myapp]
; 程序名称
command=/usr/bin/python /path/to/your/app.py
; 运行命令

; 进程配置
directory=/path/to/your/app
; 工作目录
user=www-data
; 运行用户
autostart=true
; 是否自动启动
autorestart=true
; 是否自动重启
startretries=3
; 启动重试次数

; 日志配置
stdout_logfile=/var/log/supervisor/myapp.stdout.log
; 标准输出日志
stderr_logfile=/var/log/supervisor/myapp.stderr.log
; 错误输出日志
stdout_logfile_maxbytes=50MB
; 日志文件最大大小
stdout_logfile_backups=10
; 日志备份数量

; 环境变量
environment=PYTHONPATH="/path/to/your/app",HOME="/home/www-data"

Supervisorctl 常用命令详解

服务管理命令

# 启动 supervisor 服务
sudo service supervisor start
# 或者
sudo systemctl start supervisor

# 停止 supervisor 服务
sudo service supervisor stop

# 重启 supervisor 服务
sudo service supervisor restart

# 查看 supervisor 状态
sudo service supervisor status

进程管理命令

# 查看所有进程状态
sudo supervisorctl status

# 启动单个进程
sudo supervisorctl start myapp

# 停止单个进程
sudo supervisorctl stop myapp

# 重启单个进程
sudo supervisorctl restart myapp

# 启动所有进程
sudo supervisorctl start all

# 停止所有进程
sudo supervisorctl stop all

# 重启所有进程
sudo supervisorctl restart all

# 重新加载配置(不重启运行的进程)
sudo supervisorctl reload

# 重新读取配置并受影响的进程
sudo supervisorctl update

# 查看进程日志
sudo supervisorctl tail myapp
sudo supervisorctl tail -f myapp
sudo supervisorctl tail myapp stderr

高级命令

# 进入交互模式
sudo supervisorctl

# 在交互模式下执行命令
> status
> start myapp
> stop all
> exit

# 信号操作
sudo supervisorctl signal myapp STOP
sudo supervisorctl signal all KILL

# 清除进程日志
sudo supervisorctl clear myapp

实际应用示例

示例1:管理 Flask Web 应用

创建配置文件 /etc/supervisor/conf.d/flaskapp.conf

[program:flaskapp]
command=/home/user/venv/bin/gunicorn -w 4 -b 0.0.0.0:8000 app:app
directory=/home/user/myflaskapp
user=user
autostart=true
autorestart=true
startretries=3
stdout_logfile=/var/log/supervisor/flaskapp.out.log
stderr_logfile=/var/log/supervisor/flaskapp.err.log
environment=FLASK_ENV="production",DATABASE_URL="postgresql://user:pass@localhost/db"

应用配置:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start flaskapp

示例2:管理 Celery Worker

[program:celeryworker]
command=/home/user/venv/bin/celery -A tasks worker --loglevel=info
directory=/home/user/myproject
user=user
numprocs=2
process_name=celeryworker-%(process_num)02d
autostart=true
autorestart=true
startretries=3
stdout_logfile=/var/log/supervisor/celeryworker.out.log
stderr_logfile=/var/log/supervisor/celeryworker.err.log
environment=C_FORCE_ROOT="true"

示例3:进程组管理

[program:webapp1]
command=/usr/bin/python webapp1.py
autostart=false

[program:webapp2]
command=/usr/bin/python webapp2.py
autostart=false

[group:webapps]
programs=webapp1,webapp2

管理进程组:

sudo supervisorctl start webapps:
sudo supervisorctl stop webapps:
sudo supervisorctl restart webapps:

故障排查技巧

查看详细状态

# 查看进程详细信息
sudo supervisorctl status myapp

# 跟踪日志
sudo supervisorctl tail -f myapp
sudo supervisorctl tail -f myapp stderr

# 查看主进程日志
sudo tail -f /var/log/supervisor/supervisord.log

常见问题解决

  1. 进程无法启动

    # 检查命令是否正确
    sudo supervisorctl start myapp
    
    # 查看错误日志
    sudo supervisorctl tail myapp stderr
    
  2. 配置不生效

    # 重新读取配置
    sudo supervisorctl reread
    sudo supervisorctl update
    
  3. 进程意外退出

    # 查看退出状态
    sudo supervisorctl status
    
    # 检查退出码含义
    sudo supervisorctl tail myapp
    

Web 管理界面

启用 Web 界面,在主配置文件中添加:

[inet_http_server]
port=0.0.0.0:9001
username=admin
password=your_password

访问 http://your-server:9001 即可通过 Web 界面管理进程。

最佳实践

  1. 权限管理

    • 为每个服务创建专用用户
    • 合理设置文件权限
  2. 日志管理

    • 定期清理日志文件
    • 使用 logrotate 管理日志
  3. 监控告警

    • 配置进程监控告警
    • 集成到现有监控系统
  4. 配置管理

    • 使用版本控制管理配置文件
    • 编写配置模板
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

争当做一个有趣的人

只有非常努力,才会毫不费力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值