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.d
bash
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
首先咱們看下自定義腳本內容: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