簡介:Supervisor是用Python開發的一套通用的進程管理程序,能將一個普通的命令行進程變爲後臺daemon,並監控進程狀態,異常退出時能自動重啓。
1、安裝
apt-get install supervisor
2、複製配置文件(否則會無法啓動)
cp /etc/supervisor/supervisor.conf /etc/
說明:默認/etc/supervisor.conf爲空,需要將/etc/supervisor/supervisor.conf的內容複製一份到/etc/supervisor.conf中,否則啓動不了。
3、編寫配置文件
# 創建文件 rabbitmq-worker.conf並寫入下面配置
# 設置進程的名稱,使用 supervisorctl 來管理進程時需要使用該進程名
[program:rabbitmq-worker]
# 默認爲 %(program_name)s,即 [program:x] 中的 x,後面接進程數
process_name=%(program_name)s_%(process_num)02d
# 需要啓動執行的命令,這塊就是填入rabbitmq消費者腳本命令,注意,docker這塊不能有-it參數,否則報錯無法啓動
command=docker exec php7.4-fpm php /var/www/html/rabbitmq/artisan rabbitmq:work --queue=Test
# 使用 root 用戶來啓動該進程
user=root
# 在 supervisord 啓動的時候也自動啓動
autostart=true
# 程序崩潰時自動重啓,重啓次數是有限制的,默認爲3次
autorestart=true
# 進程數
numprocs=2
# 重定向輸出的日誌
redirect_stderr=true
# 日誌路徑
stdout_logfile=/www/rabbitmq/rabbitmq_worker.log
4、相關命令說明
supervisord : supervisor的服務器端部分,用於supervisor啓動
supervisorctl:啓動supervisor的命令行窗口,在該命令行中可執行start、stop、status、
running:進程處於運行狀態
starting:Supervisor 收到啓動請求後,進程處於正在啓動過程中
stopped:進程處於關閉狀態
stopping:Supervisor 收到關閉請求後,進程處於正在關閉過程中
backoff:進程進入 starting 狀態後,由於馬上就退出導致沒能進入 running 狀態
fatal:進程沒有正常啓動
exited:進程從 running 狀態退出
5、常用命令
1、supervisorctl update 更新配置後必須執行更新命令才生效
2、supervisorctl status 查看supervisor進程
3、supervisorctl start rabbitmq-worker:* 啓動某個supervisor進程
4、supervisorctl stop rabbitmq-worker:* 停止某個supervisor進程
5、supervisorctl stop all 停止所有supervisor進程
6、supervisorctl restart rabbitmq-worker:* 重啓某個supervisor進程
7、supervisorctl reload 載入最新的配置文件,並按新的配置啓動、管理所有進程。
8、supervisord 啓動supervisord
補充說明:
supervisorctl status 列表參數說明
第一列是服務名;第二列是運行狀態,RUNNING表示運行中,FATAL 表示運行失敗,STARTING表示正在啓動,STOPED表示任務已停止; 第三/四列是進程號,最後是任務已經運行的時間。
6、效果
運行了2個rabbitmq消費者,這個數量是在配置裏面的numprocs的數量,進rabbitmq管理後臺可以看到2個消費者