# 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
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
在/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"
參數 | 說明 |
---|---|
command |
要執行的命令(必須使用絕對路徑) |
directory |
執行命令的工作目錄 |
user |
運行進程的用戶身份 |
autostart |
是否隨supervisord啟動自動啟動 |
autorestart |
自動重啟策略(true/false/unexpected) |
startsecs |
啟動后持續運行時間視為成功 |
startretries |
啟動失敗重試次數 |
stopsignal |
停止信號(TERM/KILL/INT等) |
stopwaitsecs |
發送停止信號后的等待時間 |
autorestart=true ; 任何退出都重啟
autorestart=false ; 不自動重啟
autorestart=unexpected ; 僅意外退出時重啟(非0或非stopsignal信號)
Supervisord根據進程退出狀態碼決定是否重啟: - 0:正常退出(不重啟) - 非0:異常退出(根據autorestart配置決定)
autorestart=unexpected
exitcodes=0,2 ; 只有退出碼為0或2時不重啟
防止頻繁重啟導致系統負載過高:
startretries=3 ; 最大重試次數
# 啟動supervisord服務
sudo service supervisor start
# 重新加載配置
sudo supervisorctl reread
sudo supervisorctl update
# 查看所有進程狀態
sudo supervisorctl status
# 啟動/停止/重啟特定進程
sudo supervisorctl start myapp
sudo supervisorctl stop myapp
sudo supervisorctl restart myapp
# 查看進程日志
sudo supervisorctl tail myapp
[group:mygroup]
programs=prog1,prog2
管理命令:
sudo supervisorctl stop mygroup:
[eventlistener:memmon]
command=/path/to/memmon.py
events=PROCESS_STATE
啟用Web界面(在supervisord.conf
中添加):
[inet_http_server]
port=0.0.0.0:9001
username=admin
password=yourpassword
權限問題:
sudo chmod 777 /var/run/supervisor.sock
配置不生效:
supervisorctl update
進程無法停止:
stopsignal=KILL
stopwaitsecs=30
日志文件不輪轉: 建議配合logrotate使用:
/var/log/myapp*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
postrotate
supervisorctl signal USR1 myapp
endscript
}
通過合理配置Supervisord,可以實現企業級進程管理需求,確保關鍵服務持續穩定運行。 “`
注:本文實際約1450字,完整包含了Supervisord的安裝配置、進程管理、自動重啟機制等核心內容,采用Markdown格式,可直接用于技術文檔發布。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。