Supervisor程序管理&開機自啟
supervisor是一個程序管理工具,用來啟動、停止、重啟和監測程序。
安裝
伺服器上所有應用統一安裝到目錄/usr/local/programs/,所以採用原始碼安裝
提前配置好python(2.7)環境,下載相關檔案:
-
wget wget ofollow,noindex">https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg –no-check-certificate
按下面步驟執行:
1. sh setuptools-0.6c11-py2.7.egg 2. tar -axvf supervisor-3.3.1.tar.gz 3. cd supervisor-3.3.1 4. python setup.py install 5. echo_supervisord_conf > /usr/local/programs/supervisoretc/supervisord.conf 6. supervisord -c /usr/local/programs/supervisoretc/supervisord.conf 7. supervisorctl 8. done
配置檔案supervisord.conf:
; Sample supervisor config file. ; ; For more information on the config file, please see: ; http://supervisord.org/configuration.html ; ; Notes: ;- Shell expansion ("~" or "$HOME") is not supported.Environment ;variables can be expanded using this syntax: "%(ENV_HOME)s". ;- Comments must have a leading space: "a=b ;comment" not "a=b;comment". [unix_http_server] file=/tmp/supervisor.sock; (the path to the socket file) ;chmod=0700; socket file mode (default 0700) ;chown=nobody:nogroup; socket file uid:gid owner ;username=user; (default is no username (open server)) ;password=123; (default is no password (open server)) [inet_http_server]; inet (TCP) server disabled by default port=0.0.0.0:9001; (ip_address:port specifier, *:port for all iface) ;username=user; (default is no username (open server)) ;password=123; (default is no password (open server)) [supervisord] logfile=/tmp/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=/tmp/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) ;umask=022; (process file creation umask;default 022) ;user=chrism; (default is current user, required if root) ;identifier=supervisor; (supervisord identifier, default is 'supervisor') ;directory=/tmp; (default is not to cd during start) ;nocleanup=true; (don't clean up tempfiles at start;default false) ;childlogdir=/tmp; ('AUTO' child log dir, default $TEMP) ;environment=KEY="value"; (key value pairs to add to environment) ;strip_ansi=false; (strip ansi escape codes in logs; def. false) ; the below section must remain in the config file for RPC ; (supervisorctl/web interface) to work, additional interfaces may be ; added by defining them in separate rpcinterface: sections [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; use a unix:// URLfor a unix socket ;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket ;username=chris; should be same as http_username if set ;password=123; should be same as http_password if set ;prompt=mysupervisor; cmd line prompt (default "supervisor") ;history_file=~/.sc_history; use readline history if available ; The below sample program section shows all possible program subsection values, ; create one or more 'real' program: sections to be able to control them under ; supervisor. ;[program:theprogramname] ;command=/bin/cat; the program (relative uses PATH, can take args) ;process_name=%(program_name)s ; process_name expr (default %(program_name)s) ;numprocs=1; number of processes copies to start (def 1) ;directory=/tmp; directory to cwd to before exec (def no cwd) ;umask=022; umask for process (default None) ;priority=999; the relative start priority (default 999) ;autostart=true; start at supervisord start (default: true) ;startsecs=1; # of secs prog must stay up to be running (def. 1) ;startretries=3; max # of serial start failures when starting (default 3) ;autorestart=unexpected; when to restart if exited after running (def: unexpected) ;exitcodes=0,2; 'expected' exit codes used with autorestart (default 0,2) ;stopsignal=QUIT; signal used to kill process (default TERM) ;stopwaitsecs=10; max num secs to wait b4 SIGKILL (default 10) ;stopasgroup=false; send stop signal to the UNIX process group (default false) ;killasgroup=false; SIGKILL the UNIX process group (def false) ;user=chrism; setuid to this UNIX account to run the program ;redirect_stderr=true; redirect proc stderr to stdout (default false) ;stdout_logfile=/a/path; stdout log path, NONE for none; default AUTO ;stdout_logfile_maxbytes=1MB; max # logfile bytes b4 rotation (default 50MB) ;stdout_logfile_backups=10; # of stdout logfile backups (default 10) ;stdout_capture_maxbytes=1MB; number of bytes in 'capturemode' (default 0) ;stdout_events_enabled=false; emit events on stdout writes (default false) ;stderr_logfile=/a/path; stderr log path, NONE for none; default AUTO ;stderr_logfile_maxbytes=1MB; max # logfile bytes b4 rotation (default 50MB) ;stderr_logfile_backups=10; # of stderr logfile backups (default 10) ;stderr_capture_maxbytes=1MB; number of bytes in 'capturemode' (default 0) ;stderr_events_enabled=false; emit events on stderr writes (default false) ;environment=A="1",B="2"; process environment additions (def no adds) ;serverurl=AUTO; override serverurl computation (childutils) ; The below sample eventlistener section shows all possible ; eventlistener subsection values, create one or more 'real' ; eventlistener: sections to be able to handle event notifications ; sent by supervisor. ;[eventlistener:theeventlistenername] ;command=/bin/eventlistener; the program (relative uses PATH, can take args) ;process_name=%(program_name)s ; process_name expr (default %(program_name)s) ;numprocs=1; number of processes copies to start (def 1) ;events=EVENT; event notif. types to subscribe to (req'd) ;buffer_size=10; event buffer queue size (default 10) ;directory=/tmp; directory to cwd to before exec (def no cwd) ;umask=022; umask for process (default None) ;priority=-1; the relative start priority (default -1) ;autostart=true; start at supervisord start (default: true) ;startsecs=1; # of secs prog must stay up to be running (def. 1) ;startretries=3; max # of serial start failures when starting (default 3) ;autorestart=unexpected; autorestart if exited after running (def: unexpected) ;exitcodes=0,2; 'expected' exit codes used with autorestart (default 0,2) ;stopsignal=QUIT; signal used to kill process (default TERM) ;stopwaitsecs=10; max num secs to wait b4 SIGKILL (default 10) ;stopasgroup=false; send stop signal to the UNIX process group (default false) ;killasgroup=false; SIGKILL the UNIX process group (def false) ;user=chrism; setuid to this UNIX account to run the program ;redirect_stderr=false; redirect_stderr=true is not allowed for eventlisteners ;stdout_logfile=/a/path; stdout log path, NONE for none; default AUTO ;stdout_logfile_maxbytes=1MB; max # logfile bytes b4 rotation (default 50MB) ;stdout_logfile_backups=10; # of stdout logfile backups (default 10) ;stdout_events_enabled=false; emit events on stdout writes (default false) ;stderr_logfile=/a/path; stderr log path, NONE for none; default AUTO ;stderr_logfile_maxbytes=1MB; max # logfile bytes b4 rotation (default 50MB) ;stderr_logfile_backups=10; # of stderr logfile backups (default 10) ;stderr_events_enabled=false; emit events on stderr writes (default false) ;environment=A="1",B="2"; process environment additions ;serverurl=AUTO; override serverurl computation (childutils) ; The below sample group section shows all possible group values, ; create one or more 'real' group: sections to create "heterogeneous" ; process groups. ;[group:thegroupname] ;programs=progname1,progname2; each refers to 'x' in [program:x] definitions ;priority=999; the relative start priority (default 999) ; The [include] section can just contain the "files" setting.This ; setting can list multiple files (separated by whitespace or ; newlines).It can also contain wildcards.The filenames are ; interpreted as relative to this file.Included files *cannot* ; include files themselves. [include] files = conf.d/*.conf
注意最下面一行,重點,要考!
配置管理程式
以nginx為例,在/usr/local/programs/supervisor/conf.d下建立
vi nginx.conf
[program:nginx] command=/usr/local/programs/nginx/nginx ;需要執行的命令wd user=root;(defaultiscurrentuser , requiredifroot) autostart=true ;start at supervisord start (default: true) autorestart=true;whether/when to restart (default: unexpected) startsecs=3;number of secs prog must stay running ( def . 1) stderr_logfile=/usr/local/programs/supervisor/logs/nginx_stderr_err.log;redirect proc stderr to stdout (default false) 錯誤輸出重定向 stdout_logfile=/usr/local/programs/supervisor/logs/nginx_stdout.log;stdout log path, NONEfornone; default AUTO, log輸出
wq
儲存退出,啟動 supervisord -c /etc/supervisord.conf
Supervisorctl工具
進入互動模式 supervisorctl
> status# 檢視程式狀態 > stop usercenter# 關閉 usercenter 程式 > start usercenter# 啟動 usercenter 程式 > restart usercenter# 重啟 usercenter 程式 > reread# 讀取有更新(增加)的配置檔案,不會啟動新新增的程式 > update# 重啟配置檔案修改過的程式
也可以不進入互動環境
$ supervisorctl status $ supervisorctl stop usercenter $ supervisorctl start usercenter $ supervisorctl restart usercenter $ supervisorctl reread $ supervisorctl update
開機啟動
ubuntu
開啟配置 vi /etc/rc.local
增加自啟動配置專案
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. #開機自啟動 /bin/bash -c "/usr/local/bin/supervisord -c /usr/local/programs/supervisor/supervisord.conf" exit 0
儲存並退出。
最後修改rc.local許可權 chmod +x /etc/rc.local