Supervisor 輕松搞定Linux進(jìn)程管理!讓程序后臺(tái)運(yùn)行穩(wěn)定
概述
Supervisor是用Python開發(fā)的一套通用的進(jìn)程管理程序,能將一個(gè)普通的命令行進(jìn)程變?yōu)楹笈_(tái)daemon,并監(jiān)控進(jìn)程狀態(tài),異常退出時(shí)能自動(dòng)重啟。
它是通過fork/exec的方式把這些被管理的進(jìn)程當(dāng)作supervisor的子進(jìn)程來啟動(dòng),這樣只要在supervisor的配置文件中,把要管理的進(jìn)程的可執(zhí)行文件的路徑寫進(jìn)去即可。
也實(shí)現(xiàn)當(dāng)子進(jìn)程掛掉的時(shí)候,父進(jìn)程可以準(zhǔn)確獲取子進(jìn)程掛掉的信息的,可以選擇是否自己?jiǎn)?dòng)和報(bào)警。supervisor還提供了一個(gè)功能,可以為supervisord或者每個(gè)子進(jìn)程,設(shè)置一個(gè)非root的user,這個(gè)user就可以管理它對(duì)應(yīng)的進(jìn)程。
場(chǎng)景
- Linux下如何讓程序后臺(tái)運(yùn)行?
- 關(guān)掉終端繼續(xù)讓程序運(yùn)行的方法?
- Linux ssh狀態(tài)下如何后臺(tái)運(yùn)行程序?
優(yōu)勢(shì)對(duì)比
- 相對(duì)于nohup:nohup只是簡(jiǎn)單地讓命令在后臺(tái)運(yùn)行,即使終端關(guān)閉也能繼續(xù)。但是它缺乏自動(dòng)重啟功能,也不容易監(jiān)控進(jìn)程狀態(tài)。而 Supervisor 可以自動(dòng)重啟崩潰的進(jìn)程,并且可以通過supervisorctl方便地查看狀態(tài)。
- 相對(duì)于setsid:setsid也是用于讓進(jìn)程在新的會(huì)話中運(yùn)行,但它在進(jìn)程管理的便捷性上不如 Supervisor。例如,Supervisor 可以集中管理多個(gè)進(jìn)程,方便地同時(shí)啟動(dòng)和停止多個(gè)進(jìn)程,而setsid主要關(guān)注單個(gè)進(jìn)程的會(huì)話分離。
- 相對(duì)于screen:screen可以讓進(jìn)程在一個(gè)虛擬終端中運(yùn)行,即使退出終端也能保持運(yùn)行。但是它主要側(cè)重于終端會(huì)話管理,不像 Supervisor 那樣專注于進(jìn)程的自動(dòng)管理和監(jiān)控,如自動(dòng)重啟、日志管理等功能。
安裝
Step1 更新依賴庫(kù)
apt-get update -yStep2 安裝 supervisor
默認(rèn)情況下,Supervisor 包在 Ubuntu 20.04 默認(rèn)存儲(chǔ)庫(kù)中可用。您可以使用以下命令安裝它:
apt-get install supervisor -y安裝 Supervisor 后,您可以使用以下命令驗(yàn)證已安裝的 Supervisor 版本:
supervisord -v接下來,使用以下命令驗(yàn)證 Supervisor 服務(wù)的狀態(tài):
sudo systemctl status supervisor
[sudo] password for www:
● supervisor.service - Supervisor process control system for UNIX
Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2025-02-08 15:36:03 CST; 23min ago
Docs: http://supervisord.org
Main PID: 104478 (supervisord)
Tasks: 2 (limit: 2315)
Memory: 25.4M
CGroup: /system.slice/supervisor.service
├─104478 /usr/bin/python3 /usr/bin/supervisord -n -c /etc/supervisor/supervisord.confStep3 啟用 Supervisor Web 界面
Supervisor 提供了一個(gè)基于 Web 的界面來管理所有進(jìn)程,但默認(rèn)情況下它是禁用的。您可以通過編輯文件 /etc/supervisor/supervisord.conf 來啟用它。
vim /etc/supervisor/supervisord.conf添加以下幾行:
[inet_http_server]
port=*:9001
username=admin
password=admin保存并關(guān)閉文件,然后重新啟動(dòng) Supervisor 服務(wù)以應(yīng)用更改:
systemctl restart supervisorStep4 使用Supervisor管理 redis隊(duì)列進(jìn)程
您需要為要管理的每個(gè)服務(wù)創(chuàng)建一個(gè)獨(dú)立的配置文件。您可以使用以下命令創(chuàng)建 think-redis-queue 配置文件:
sudo vim /etc/supervisor/conf.d/think-redis-queue.conf添加以下幾行:
[program:think-redis-queue]
command=/usr/local/php-8.3.7/bin/php /home/www/website/train.tinywan.com/think redis-queue consumer
autostart=true
autorestart=true
startretries=5
numprocs=1
startsecs=0
process_name=%(program_name)s_%(process_num)02d
stderr_logfile=/var/log/supervisor/%(program_name)s_stderr.log
stderr_logfile_maxbytes=10MB
stdout_logfile=/var/log/supervisor/%(program_name)s_stdout.log
stdout_logfile_maxbytes=10MB完成后保存并關(guān)閉文件。接下來,告訴主管了解新配置:
sudo supervisorctl reread你應(yīng)該得到以下輸出:
think-redis-queue: available接下來,告訴 Supervisor 啟動(dòng) think-redis-queue 服務(wù):
sudo supervisorctl update你應(yīng)該得到以下輸出:
think-redis-queue: added process group接下來,使用以下命令驗(yàn)證 Supervisor 是否啟動(dòng)了 think-redis-queue服務(wù):
sudo supervisorctl你應(yīng)該得到以下輸出:
think-redis-queue:think-redis-queue_00 RUNNING pid 104745, uptime 0:23:52如果要停止 think-redis-queue 服務(wù),請(qǐng)運(yùn)行以下命令:
supervisor> stop think-redis-queue:think-redis-queue_00
think-redis-queue:think-redis-queue_00: stopped
supervisor> start think-redis-queue:think-redis-queue_00
think-redis-queue:think-redis-queue_00: started
supervisor>Step5 訪問 Supervisor Web 界面
圖片
Nginx配置
server {
listen 443 ssl http2;
server_name supervisor.tinywan.cn;
ssl_certificate /home/www/.acme.sh/supervisor.tinywan.cn/supervisor.tinywan.cn.cer;
ssl_certificate_key /home/www/.acme.sh/supervisor.tinywan.cn/supervisor.tinywan.cn.key;
location / {
proxy_pass http://0.0.0.0:9001;
proxy_buffering off;
}
}常用命令
supervisorctl status //查看所有進(jìn)程的狀態(tài)
supervisorctl stop es //停止es
supervisorctl start es //啟動(dòng)es
supervisorctl restart //重啟es
supervisorctl update //配置文件修改后使用該命令加載新的配置
supervisorctl reload //重新啟動(dòng)配置中的所有程序CentOS發(fā)行版
安裝
yum install supervisor配置文件
/etc/supervisord.conf子配置目錄
[include]
files = supervisord.d/*.ini編寫配置 redis-queue-order-consumer.ini
[program:redis-queue-order-consumer]
command=/usr/local/php-8.4/bin/php /home/wwwroot/order.tinywan.com/think redis-queue order-consumer
user=www
autostart=true
autorestart=true
startretries=5
numprocs=1
startsecs=0
process_name=%(program_name)s_%(process_num)02d
stderr_logfile=/var/log/supervisor/%(program_name)s_stderr.log
stderr_logfile_maxbytes=10MB
stdout_logfile=/var/log/supervisor/%(program_name)s_stdout.log
stdout_logfile_maxbytes=10MBsupservisorctl 命令
supervisorctl查看服務(wù)
supervisor> status
redis-queue-live-consumer:redis-queue-order-consumer_00 RUNNING pid 1692927, uptime 0:16:17停止某個(gè)服務(wù)
stop all停止所有服務(wù)
start all























