在Centos7使用supervisor

置頂:
推薦使用pip install supervisor安裝最新版supervisor,yum install supervisor最高版本3.1.4,有不少bugjava

名稱解釋

supervisor:要安裝的軟件的名稱。
supervisord:裝好supervisor軟件後,supervisord用於啓動supervisor服務。
supervisorctl:用於管理supervisor配置文件中program。python

使用yum安裝

yum install epel-release
yum install supervisor

systemctl enable supervisord.service # 開機自啓動
systemctl start supervisord.service # 啓動supervisord服務
systemctl status supervisord.service # 查看supervisord服務狀態

# 開啓web服務:修改supervisord.conf ,inet_http_server節點取消註釋。
vim /etc/supervisord.conf 
supervisorctl reload
[inet_http_server]         ; inet (TCP) server disabled by default
port=*:9001        ; (ip_address:port specifier, *:port for all iface)
username=clark              ; (default is no username (open server))
password=123456               ; (default is no password (open server))

ps -ef|grep supervisord # 查看是否存在supervisord進程

應用配置

Supervisor 管理應用的進程,須要對每一個應用進行配置。在 /etc/supervisord.d 中建立 helloworld.ini,每一個應用對應一個配置文件便可。
下面是配置文件的示例:web

[program:helloworld]  ;程序的名稱
command = dotnet HelloWorld.dll ;執行的命令
directory = /root/www/ ;命令執行的目錄
environment = ASPNETCORE__ENVIRONMENT=Production  ;環境變量
user = root  ;執行進程的用戶
stopsignal = INT  
autostart = true  ;是否自動啓動
autorestart = true  ;是否自動重啓
startsecs = 1  ;自動重啓間隔
stderr_logfile = /var/log/helloworld.err.log  ;標準錯誤日誌
stdout_logfile = /var/log/helloworld.out.log  ;標準輸出日誌

實際項目:spring

supervisor部署:
cd /etc/supervisord.d/

vim product_new_merchant.ini

[program:product_new_merchant]
user = root
directory = /root/data_hub/all_script
command = /root/.virtualenvs/ProductNewMerchant/bin/python3.7 product_new_merchant.py
autostart = true
autorestart = true
startsecs = 1
environment = MYSQL_HOST="192.168.6.160",MYSQL_DATABASE="xxxxx",MYSQL_USER_NAME="xxxxxx",MYSQL_PASSWORD="xxxxx",MYSQL_PORT=3306,REDIS_HOST="192.168.95.55",LANG="en_US.utf8",LC_ALL="en_US.UTF-8",LC_LANG="en_US.UTF-8"
stdout_logfile = /var/log/product_new_merchant.log
redirect_stderr=true
stopsignal = INT

建立好配置文件後,重啓 Supervisorshell

supervisorctl reload

或熱重啓,不會重啓其餘子進程vim

supervisorctl reread

supervisorctl update

爲確保沒有錯誤,能夠正常啓動,使用前文提到的查看Supervisor狀態的命令查看。或者查看要管理的進程是否啓動,本例中可使用下面的命令:centos

ps -ef | grep HelloWorld.dll

或
ps -ef | grep dotnet

可能遇到的問題

一、我在網頁上tail的時候,要不就是一直不返回,要不就是Error response
Error code 410.
Message: Gone.
二、stderr_logfile和stdout_logfile 顛倒
三、web界面中文亂碼
參考:https://www.crifan.com/upgrad...安全

3.1.4老版本,升級最新版
[root@web-95-55 admin]# supervisord --version
3.1.4

備份yum版本supervisor配置文件,供參考:

yum remove supervisor
yum remove python-meld3
pip install supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
vim /etc/supervisor/supervisord.conf

修改應用配置文件路徑:
;[include]
files = /etc/supervisor/config.d/*.ini

mkdir /etc/supervisor/config.d
cd /etc/supervisor/config.d
啓動supervisor:
supervisord -c /etc/supervisor/supervisord.conf

附:公司運維小哥筆記

yum install supervisor -y
supervisor 配置說明
經過這種形式安裝的supervisor,其配置文件的目錄位於:
/etc/supervisord.conf (主配置文件,下面會詳細介紹)
/etc/supervisor.d/ (默認子進程配置文件,也就是須要咱們根據程序配置的地方)

[unix_http_server]
file=/home/supervisor/supervisor.sock   ; supervisorctl使用的 socket文件的路徑
;chmod=0700                 ; 默認的socket文件權限0700
;chown=nobody:nogroup       ; socket文件的擁有者

[inet_http_server]         ; 提供web管理後臺管理相關配置
port=0.0.0.0:9001          ; web管理後臺運行的ip地址及端口,綁定外網需考慮安全性 
;username=root             ; web管理後臺登陸用戶名密碼
;password=root

[supervisord]
logfile=/var/log/supervisord.log ; 日誌文件,默認在$CWD/supervisord.log
logfile_maxbytes=50MB        ; 日誌限制大小,超過會生成新文件,0表示不限制
logfile_backups=10           ; 日誌備份數量默認10,0表示不備份
loglevel=info                ; 日誌級別
pidfile=/home/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid              ; pid文件
nodaemon=false               ; 是否在前臺啓動,默認後臺啓動false
minfds=1024                  ; 能夠打開文件描述符最小值
minprocs=200                 ; 能夠打開的進程最小值

[supervisorctl]
serverurl=unix:///home/supervisor/supervisor.sock ; 經過socket鏈接supervisord,路徑與unix_http_server->file配置的一致

[include]
files = supervisor.d/*.conf ;指定了在當前目錄supervisor.d文件夾下配置多個配置文件

定義supervisor管理進程配置文件

[program:sboot] ;[program:xxx] 這裏的xxx是指的項目名字
directory = /opt/project  ;程序所在目錄
command =  java -jar springboot-hello-sample.jar ;程序啓動命令
autostart=true ;是否跟隨supervisord的啓動而啓動
autorestart=true; 程序退出後自動重啓,可選值:[unexpected,true,false],默認爲unexpected,表示進程意外殺死後才重啓
stopasgroup=true;進程被殺死時,是否向這個進程組發送stop信號,包括子進程
killasgroup=true;向進程組發送kill信號,包括子進程
stdout_logfile=/var/log/sboot/supervisor.log;該程序日誌輸出文件,目錄須要手動建立
stdout_logfile_maxbytes = 50MB;日誌大小
stdout_logfile_backups  = 100;備份數


service supervisord restart

直接在命令行輸入supervisorctl會展現當前已配置好的項目信息。
[root@wangzh supervisor.d]# supervisorctl 
sboot                            RUNNING   pid 27517, uptime 0:18:04
supervisor> 


而後能夠執行
start/stop/restart sboot 來簡單控制項目的啓停等

supervisorctl update #更新配置文件
supervisorctl reload #從新啓動配置的程序
supervisorctl stop all #中止所有管理進程

參考:

一、https://www.chengxulvtu.com/s...springboot

二、https://blog.csdn.net/DongGeG...運維

相關文章
相關標籤/搜索