安裝Supervisor

weixin_33762321發表於2017-11-16

[toc]

安裝Supervisor

安裝python安裝工具pip

下載get-pip.py 檔案
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate

執行安裝
python get-pip.py

如果 安裝完成pip 命令不能使用,搜尋系統中pip檔案,建立命令連結
ln -s /usr/local/python27/bin/pip  /usr/bin/pip

安裝supervisord

pip install supervisor
安裝後會出現兩個命令
/usr/bin/supervisord -- supervisor 服務守護程式
/usr/bin/supervisorctl -- supervisor 控制檯程式

測試安裝是否成功

echo_supervisord_conf

建立配置檔案

mkdir -p /etc/supervisor
mkdir -m 755 -p /etc/supervisor/
echo_supervisord_conf > /etc/supervisord.conf   #生成預設配置檔案
sed -i "s/\;\[include\]/\[include\]/" /etc/supervisord.conf 
echo "files = /etc/supervisor/*.conf" >> /etc/supervisord.conf

啟動supervisor

執行:supervisord
檢視程式是否執行:ps -ef|grep supervisor
檢視任務狀態:supervisorctl


Centos7 建立服務


cat > /usr/lib/systemd/system/supervisord.service << EOF
[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
SysVStartPriority=99

[Install]
WantedBy=multi-user.target
EOF
systemclt enable supervisord

Centos6 建立服務


cat > /etc/init.d/supervisord << EOF
#!/bin/sh
#
# /etc/rc.d/init.d/supervisord
#
# Supervisor is a client/server system that
# allows its users to monitor and control a
# number of processes on UNIX-like operating
# systems.
#
# chkconfig: - 64 36
# description: Supervisor Server
# processname: supervisord

# Source init functions
. /etc/rc.d/init.d/functions

prog="supervisord"

prefix="/usr/"
exec_prefix="${prefix}"
prog_bin="${exec_prefix}/bin/supervisord"
PIDFILE="/var/run/$prog.pid"

start()
{
        echo -n $"Starting $prog: "
        daemon $prog_bin --pidfile $PIDFILE
        [ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog startup"
        echo
}
stop()
{
        echo -n $"Shutting down $prog: "
        [ -f $PIDFILE ] && killproc $prog || success $"$prog shutdown"
        echo
}

case "$1" in
  start)
    start
  ;;
  stop)
    stop
  ;;
  status)
        status $prog
  ;;
  restart)
    stop
    start
  ;;

  *)
    echo "Usage: $0 {start|stop|restart|status}"
  ;;
esac
EOF

chmod +x /etc/init.d/supervisord
chkconfig --add supervisord
chkconfig supervisord --level 2345 on

任務配置

etc/supervisor/ 目錄下建立一個 .conf 的檔案(可以直接寫入到supervisor.conf檔案中,推薦在supervisor目錄下新建一個任務配置檔案)

vi /etc/supervisor/tomcat8801
[program:tomcat8801]
command=/opt/tomcat/bin/catalina.sh run
environment=JAVA_HOME="/usr/local/jdk/",JAVA_BIN="/usr/local/jdk/bin"
directory=/opt/tomcat
autostart = true
autorestart=true
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0


.conf 檔案引數說明

command=                啟動命令
environment=            執行環境
directory=              軟體主目錄
stdout_logfile=         日誌檔案位置
;autostart = true     ; 在 supervisord 啟動的時候也自動啟動
;startsecs = 5        ; 啟動 5 秒後沒有異常退出,就當作已經正常啟動了
;autorestart = true   ; 程式異常退出後自動重啟
;startretries = 3     ; 啟動失敗自動重試次數,預設是 3
;user = leon          ; 用哪個使用者啟動
;redirect_stderr = true  ; 把 stderr 重定向到 stdout,預設 false
;stdout_logfile_maxbytes = 20MB  ; stdout 日誌檔案大小,預設 50MB
;stdout_logfile_backups = 20     ; stdout 日誌檔案備份數
; stdout 日誌檔案,需要注意當指定目錄不存在時無法正常啟動,所以需要手動建立目錄(supervisord 會自動建立日誌檔案)
; 可以通過 environment 來新增需要的環境變數,一種常見的用法是修改 PYTHONPATH


任務管理

supervisorctl 命令進入 supervisorctl 的 shell 介面,然後可以執行不同的命令了

status    # 檢視程式狀態
stop usercenter   # 關閉 usercenter 程式
start usercenter  # 啟動 usercenter 程式
restart usercenter    # 重啟 usercenter 程式
reload    # 讀取有更新(增加)的配置檔案,不會啟動新新增的程式
update    # 重啟配置檔案修改過的程式

管理nginx

[program:up_nginx]
command=/usr/sbin/nginx
process_name=%(program_name)s
numprocs=4                    ; 啟動幾個程式
autostart=true                ; 隨著supervisord的啟動而啟動
autorestart=true              ; 自動重啟。。當然要選上了
startretries=10               ; 啟動失敗時的最多重試次數
exitcodes=0                 ; 正常退出程式碼(是說退出程式碼是這個時就不再重啟了嗎?待確定)
stopsignal=KILL               ; 用來殺死程式的訊號
stopwaitsecs=10               ; 傳送SIGKILL前的等待時間
redirect_stderr=true          ; 重定向stderr到stdout

管理tomcat

[program:ucaction_pre]
command=/mnt/data/tomcat_uc/bin/catalina.sh run
environment=JAVA_HOME="/usr/local/jdk/",JAVA_BIN="/usr/local/jdk/bin"
directory=/mnt/data/tomcat_uc ; first change to the dir and exec the command
autostart = true
autorestart = true
stopsignal=QUIT
stopasgroup=true ;預設為false,程式被殺死時,是否向這個程式組傳送stop訊號,包括子程式
killasgroup=true ;預設為false,向程式組傳送kill訊號,包括子程式
redirect_stderr=true ; 把stderr重定向到stdout,預設false
stdout_logfile_maxbytes=50MB  ; stdout 日誌檔案大小,預設50MB
stdout_logfile_backups = 10   ; stdout 日誌檔案備份數,預設是10
stdout_logfile = /mnt/logs/tomcat_uc/catalina.out

zookeeper

supervisord.conf 配置檔案詳解

[inet_http_server]             ; 開啟TCP/IP http 伺服器
port=192.168.18.10:9001        ; 偵聽埠
username=user                  ; 認證使用者名稱
password=123                   ; 密碼

[supervisord]
logfile=/tmp/supervisord.log    ; 日誌輸出檔案
logfile_maxbytes=50MB           ; 日誌最大空間
logfile_backups=10              ; 日誌輪轉保留數
loglevel=info                   ; (日誌等級; default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid    ; (pid檔案; default supervisord.pid)
nodaemon=false                  ; (前臺執行 ;default false)
minfds=1024                     ; (最小檔案描述符數 ;default 1024)
minprocs=200                    ; (最小程式數  ;default 200)

[rpcinterface:supervisor]       ; rpc 介面
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]    ; 控制檯設定
erverurl=unix:///tmp/supervisor.sock    ; socket 訪問路徑
serverurl=http://192.168.18.10:9001     ; URL 訪問路徑
username=user                           ; 使用的認證使用者名稱 (上同)
password=123                            ; 密碼
prompt=mysupervisor                     ; cmd line prompt (default "supervisor")
history_file=~/.sc_history              ; use readline history if available


[program:nginx]
command=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf         ; 程式路徑
directory=/tmp                                        ; 切換到目錄
user=www-data                                         ; 執行程式的使用者
autorestart=true                                      ; 自動重啟
priority=999                                          ; 優先順序
startsecs=1                                           ; 重啟前等待時間
startretries=100                                      ; 最大重啟次數 
stdout_logfile=/tmp/supervisor/nginx/nginx.log        ; 日誌檔案
stdout_logfile_maxbytes=10MB                          ; 日誌檔案最大容量
stderr_logfile=/tmp/supervisor/nginx/nginx_err.log    ; 錯誤日誌檔案
stderr_logfile_maxbytes=1MB                           ; 錯誤日誌檔案最大容量

相關文章