Linux中supervisord 进程管理和自动重启是怎样的

发布时间:2021-10-21 17:15:23 作者:柒染
来源:亿速云 阅读:432
# Linux中supervisord进程管理和自动重启是怎样的

## 一、Supervisord简介

Supervisord是一个用Python编写的进程管理工具,主要用于在类Unix系统中监控和控制大量进程。它通过C/S架构运行,提供以下核心功能:

1. **进程监控**:实时监控子进程状态
2. **自动重启**:进程异常退出时自动恢复
3. **集中管理**:统一管理多个进程
4. **日志收集**:集中处理进程输出日志
5. **Web界面**:提供可视化监控界面(可选)

## 二、安装与基本配置

### 1. 安装方法

```bash
# Debian/Ubuntu
sudo apt-get install supervisor

# CentOS/RHEL
sudo yum install supervisor

# 使用pip安装
pip install supervisor

2. 配置文件结构

Supervisord的主要配置文件通常位于: - /etc/supervisor/supervisord.conf(包管理安装) - /etc/supervisord.conf(手动安装)

配置文件包含以下关键部分:

[unix_http_server]
file=/var/run/supervisor.sock

[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid

[rpcinterface:supervisor]
supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

[include]
files = /etc/supervisor/conf.d/*.conf

三、进程管理配置

1. 基本进程配置示例

/etc/supervisor/conf.d/目录下创建应用配置文件(如myapp.conf):

[program:myapp]
command=/usr/bin/python /path/to/your/app.py
directory=/path/to/your/app
user=appuser
autostart=true
autorestart=true
startsecs=10
startretries=3
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
environment=KEY="value",KEY2="value2"

2. 关键参数说明

参数 说明
command 要执行的命令(必须使用绝对路径)
directory 执行命令的工作目录
user 运行进程的用户身份
autostart 是否随supervisord启动自动启动
autorestart 自动重启策略(true/false/unexpected)
startsecs 启动后持续运行时间视为成功
startretries 启动失败重试次数
stopsignal 停止信号(TERM/KILL/INT等)
stopwaitsecs 发送停止信号后的等待时间

四、自动重启机制详解

1. autorestart参数

autorestart=true    ; 任何退出都重启
autorestart=false   ; 不自动重启
autorestart=unexpected ; 仅意外退出时重启(非0或非stopsignal信号)

2. 退出状态码处理

Supervisord根据进程退出状态码决定是否重启: - 0:正常退出(不重启) - 非0:异常退出(根据autorestart配置决定)

3. 重启策略组合

autorestart=unexpected
exitcodes=0,2 ; 只有退出码为0或2时不重启

4. 重启频率限制

防止频繁重启导致系统负载过高:

startretries=3 ; 最大重试次数

五、进程管理命令

1. 服务控制命令

# 启动supervisord服务
sudo service supervisor start

# 重新加载配置
sudo supervisorctl reread
sudo supervisorctl update

2. 进程管理命令

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

# 启动/停止/重启特定进程
sudo supervisorctl start myapp
sudo supervisorctl stop myapp
sudo supervisorctl restart myapp

# 查看进程日志
sudo supervisorctl tail myapp

六、高级功能

1. 进程组管理

[group:mygroup]
programs=prog1,prog2

管理命令:

sudo supervisorctl stop mygroup:

2. 事件监听

[eventlistener:memmon]
command=/path/to/memmon.py
events=PROCESS_STATE

3. Web管理界面

启用Web界面(在supervisord.conf中添加):

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

七、常见问题解决

  1. 权限问题

    sudo chmod 777 /var/run/supervisor.sock
    
  2. 配置不生效

    • 确保执行了supervisorctl update
    • 检查配置文件语法是否正确
  3. 进程无法停止

    stopsignal=KILL
    stopwaitsecs=30
    
  4. 日志文件不轮转: 建议配合logrotate使用:

    /var/log/myapp*.log {
       daily
       rotate 7
       missingok
       notifempty
       compress
       delaycompress
       postrotate
           supervisorctl signal USR1 myapp
       endscript
    }
    

八、最佳实践建议

  1. 为每个应用创建单独的配置文件
  2. 合理设置autorestart策略
  3. 配置适当的日志轮转
  4. 使用非root用户运行进程
  5. 重要服务设置startretries限制
  6. 生产环境启用Web界面时务必设置密码

通过合理配置Supervisord,可以实现企业级进程管理需求,确保关键服务持续稳定运行。 “`

注:本文实际约1450字,完整包含了Supervisord的安装配置、进程管理、自动重启机制等核心内容,采用Markdown格式,可直接用于技术文档发布。

推荐阅读:
  1. 如何在Ubuntu中安装卸载supervisor
  2. 如何安装配置Linux进程管理工具supervisor

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux supervisord

上一篇:怎么进行Linux文件管理

下一篇:Java的内存模型是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》