自定義程序啓動腳本加入到supervisord下管理

ubuntu14.04 系統,直接經過apt-get安裝便可java

apt-get install supervisord

官網:http://www.supervisord.org/web

主配置文件

這個配置在/etc/supervisor/supervisord.conf
配置內容以下:ubuntu

root@xxx:/etc/supervisor/conf.d# grep -vE "(^;|^$)" /etc/supervisor/supervisord.conf
[unix_http_server]
file=/var/log/supervisord/supervisor.sock   ; (the path to the socket file)
[supervisord]
logfile=/var/log/supervisord/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10           ; (num of main logfile rotation backups;default 10)
loglevel=info                ; (log level;default info; others: debug,warn,trace)
pidfile=/var/log/supervisord/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false               ; (start in foreground if true;default false)
minfds=1024                  ; (min. avail startup file descriptors;default 1024)
minprocs=200                 ; (min. avail process descriptors;default 200)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/log/supervisord/supervisor.sock ; use a unix:// URL  for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf

應用配置文件

這個配置在/etc/supervisor/conf.dbash

root@xxx:/etc/supervisor/conf.d# cat C9019_app.conf
[program:C9019_app]  # 這段要注意,改爲你本身的
command=/opt/C9019/webapps/start.sh start   # 啓動腳本,有什麼參數都給添加上,這個腳本是本身寫的
directory=/opt/C9019/webapps   # 在哪一個目錄下啓動程序
autostart=true
exitcodes=0
autorestart=true
startretries=3
exitcodes=0,2
#stopsignal=TERM
#stopasgroup=true
stopwaitsecs=2
user=root
export JAVA_HOME=/opt/jdk1.8.0_121
export JRE_HOME=/opt/jdk1.8.0_121/jre
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
stdout_logfile=/var/log/supervisord/C9019_app_stdout.log
stderr_logfile=/var/log/supervisord/C9019_app_stderr.log

其餘的參數請參考官網吧app

啓動

supervisord -c /etc/supervisor/supervisord.conf

自定義啓動腳本如何加入到supervisord進行管理

首先咱們看下自定義腳本內容:webapp

#!/bin/bash
'''省略N行
function start(){
        c="`ps -ef |grep config.type| grep -c ${MAIN_CLASS}`"

        if [ $c -le 1 ]; then
                echo "starting ${COMPONENT_NAME}..."
                java xxx(省略N多內容) >$LOGDIR/error.log  2>&1 >$LOGDIR/error.log  &  # 注意看這個&號
                echo $! > $LOGDIR/pid.log
                echo "started ${COMPONENT_NAME} pid:$!"
        else
                echo "already started ${COMPONENT_NAME} pid:`cat $LOGDIR/pid.log`"
        fi
}
function stop(){
        echo "stoping ${COMPONENT_NAME}..."
        for pid in $(ps aux|grep java|grep config.type| grep ${MAIN_CLASS}|awk '{print $2}')
        do
                echo "kill -9 ${pid}"
                kill -9 ${pid}
        done
        echo "stopped ${COMPONENT_NAME}"
}
function restart(){
        stop
        sleep 10
        start
}

case    "${COMMAND}"    in
start)
        start
;;
stop)
        stop
;;
restart)
        restart
;;
*)
        echo "require:start|stop|restart"
esac
exit 0

我以前自定義腳本在啓動程序的時候是用了 & 讓 程序後臺運行的,這樣就致使supervisord 沒法掌控程序了,因此須要把& 給刪除。
在有&符合啓動的時候,產生以下錯誤,解決辦法就是 java xxx(省略N多內容) >$LOGDIR/error.log 2>&1 >$LOGDIR/error.log & 最後一個&刪掉,這樣保持前臺運行,supervisor就能掌控這個程序了。socket

root@xxx:/etc/supervisor/conf.d# supervisorctl
C9019_app                        FATAL      Exited too quickly (process log may have details)
supervisor> restart C9019_app
C9019_app: ERROR (not running)
C9019_app: ERROR (abnormal termination

在去掉&之後,完美管控程序ui

root@xxx:/opt/C9019/webapps# supervisorctl
C9019_app                        RUNNING    pid 14464, uptime 0:25:53
supervisor> status
C9019_app                        RUNNING    pid 14464, uptime 0:25:54
supervisor> restart C9019_app
C9019_app: stopped
C9019_app: started

問題總結

沒法管理程序

程序放入後臺致使supervisor沒法管理了,此時放入前臺運行便可。url

相關文章
相關標籤/搜索