supervisor监控php进程程序,详解Supervisor进程守护监控(转)
Supervisor的配置
2.0 創建目錄,初始化配置文件
mkdir /usr/supervisor
echo_supervisord_conf > /usr/supervisor/supervisord.conf
1
2
mkdir/usr/supervisor
echo_supervisord_conf>/usr/supervisor/supervisord.conf
echo_supervisord_conf詳解:
echo_supervisord_conf詳解
[root@centos-011 ~ 07:50:00]#cat /etc/supervisord.conf.bak
; Sample supervisor config file.
[unix_http_server]
file=/var/run/supervisor/supervisor.sock ; socket 路徑
;chmod=0700 ; socket 文件的權限
;chown=nobody:nogroup ; socket 所屬用戶及組
;username=user ; 用戶名
;password=123 ; 密碼
;[inet_http_server] ; 是否啟用服務,默認是關閉的(啟用的話可以看到supervisor 管理的服務狀態)
;port=127.0.0.1:9001 ; 監聽的IP及端口
;username=user ; 用戶名
;password=123 ; 密碼
[supervisord] ; supervisord 全局配置
logfile=/var/log/supervisor/supervisord.log ; supervisor 日志路徑
logfile_maxbytes=50MB ; 單個日志文件最大數
logfile_backups=10 ; 保留多少個日志文件(默認10個)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; pid 文件路徑
nodaemon=false ; 啟動是否丟到前臺,設置為false ,表示以daemon 的方式啟動
minfds=1024 ; 最小文件打開數,對應系統limit.conf 中的nofile ,默認最小為1024,最大為4096
minprocs=200 ; 最小的進程打開數,對應系統的limit.conf 中的nproc,默認為200
;umask=022 ; (process file creation umask;default 022)
;user=chrism ; 啟動supervisord 服務的用戶,默認為root
;identifier=supervisor ; (supervisord identifier, default is 'supervisor')
;directory=/tmp ; 這里的目錄指的是服務的工作目錄
;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:///var/run/supervisor/supervisor.sock ; use a unix:// URL for 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] ; 定義一個守護進程 ,比如下面的elasticsearch
;command=/bin/cat ; 啟動程序使用的命令,可以是絕對路徑或者相對路徑
;process_name=%(program_name)s ; 一個python字符串表達式,用來表示supervisor進程啟動的這個的名稱,默認值是%(program_name)s
;numprocs=1 ; Supervisor啟動這個程序的多個實例,如果numprocs>1,則process_name的表達式必須包含%(process_num)s,默認是1
;directory=/tmp ; supervisord在生成子進程的時候會切換到該目錄
;umask=022 ; umask for process (default None)
;priority=999 ; 權重,可以控制程序啟動和關閉時的順序,權重越低:越早啟動,越晚關閉。默認值是999
;autostart=true ; 如果設置為true,當supervisord啟動的時候,進程會自動啟動
;autorestart=true ; 設置為隨 supervisord 重啟而重啟,值可以是false、true、unexpected。false:進程不會自動重啟
;startsecs=10 ; 程序啟動后等待多長時間后才認為程序啟動成功,默認是10秒
;startretries=3 ; supervisord嘗試啟動一個程序時嘗試的次數。默認是3
;exitcodes=0,2 ; 一個預期的退出返回碼,默認是0,2。
;stopsignal=QUIT ; 當收到stop請求的時候,發送信號給程序,默認是TERM信號,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2
;stopwaitsecs=10 ; 在操作系統給supervisord發送SIGCHILD信號時等待的時間
;user=chrism ; 如果supervisord以root運行,則會使用這個設置用戶啟動子程序
;redirect_stderr=true ; 如果設置為true,進程則會把標準錯誤輸出到supervisord后臺的標準輸出文件描述符
;stdout_logfile=/a/path ; 把進程的標準輸出寫入文件中,如果stdout_logfile沒有設置或者設置為AUTO,則supervisor會自動選擇一個文件位置
;stdout_logfile_maxbytes=1MB ; 標準輸出log文件達到多少后自動進行輪轉,單位是KB、MB、GB。如果設置為0則表示不限制日志文件大小
;stdout_logfile_backups=10 ; 標準輸出日志輪轉備份的數量,默認是10,如果設置為0,則不備份
;stdout_capture_maxbytes=1MB ; 當進程處于stderr capture mode模式的時候,寫入FIFO隊列的最大bytes值,單位可以是KB、MB、GB
;stdout_events_enabled=false ; 如果設置為true,當進程在寫它的stderr
;stderr_logfile=/a/path ; 把進程的錯誤日志輸出一個文件中,除非redirect_stderr參數被設置為true
;stderr_logfile_maxbytes=1MB ; 錯誤log文件達到多少后自動進行輪轉,單位是KB、MB、GB。如果設置為0則表示不限制日志文件大小
;stderr_logfile_backups=10 ; 錯誤日志輪轉備份的數量,默認是10,如果設置為0,則不備份
;stderr_capture_maxbytes=1MB ; 當進程處于stderr capture mode模式的時候,寫入FIFO隊列的最大bytes值,單位可以是KB、MB、GB
;stderr_events_enabled=false ; 如果設置為true,當進程在寫它的stderr到文件描述符的時候,PROCESS_LOG_STDERR事件會被觸發
;environment=A=1,B=2 ; 一個k/v對的list列表
;serverurl=AUTO ; 是否允許子進程和內部的HTTP服務通訊,如果設置為AUTO,supervisor會自動的構造一個url
; 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.
#這個地方是自定義一個守護進程
[program:elasticsearch] ; 定義一個守護進程 elasticsearch
environment=ES_HOME=/usr/local/elasticsearch ; 設置ES_HOME 環境變量
user=elk ; 啟動elasticsearch 的用戶
directory=/usr/local/elasticsearch ; 進入到這個目錄中
command=/usr/local/elasticsearch/bin/elasticsearch ; 執行啟動命令
numprocs=1 ; Supervisor啟動這個程序的多個實例,如果numprocs>1,則process_name的表達式必須包含%(process_num)s,默認是1
autostart=true ; 設置為隨 supervisord 啟動而啟動
autorestart=true ; 設置為隨 supervisord 重啟而重啟
startretries=3 ; 設置elasticsearch 重啟的重試次數
priority=1 ; 權重,可以控制程序啟動和關閉時的順序,權重越低:越早啟動,越晚關閉。默認值是999
;[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)
;autorestart=unexpected ; restart at unexpected quit (default: unexpected)
;startsecs=10 ; number of secs prog must stay running (def. 1)
;startretries=3 ; max # of serial start failures (default 3)
;exitcodes=0,2 ; 'expected' exit codes for process (default 0,2)
;stopsignal=QUIT ; signal used to kill process (default TERM)
;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
;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_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 ; # 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 ; 上面配置好的服務名,比如elasticsearch,kibana,logstash
;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 = supervisord.d/*.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
[root@centos-011~07:50:00]#cat /etc/supervisord.conf.bak
;Samplesupervisorconfigfile.
[unix_http_server]
file=/var/run/supervisor/supervisor.sock;socket路徑
;chmod=0700;socket文件的權限
;chown=nobody:nogroup;socket所屬用戶及組
;username=user;用戶名
;password=123;密碼
;[inet_http_server];是否啟用服務,默認是關閉的(啟用的話可以看到supervisor管理的服務狀態)
;port=127.0.0.1:9001;監聽的IP及端口
;username=user;用戶名
;password=123;密碼
[supervisord];supervisord全局配置
logfile=/var/log/supervisor/supervisord.log;supervisor日志路徑
logfile_maxbytes=50MB;單個日志文件最大數
logfile_backups=10;保留多少個日志文件(默認10個)
loglevel=info;(loglevel;defaultinfo;others:debug,warn,trace)
pidfile=/var/run/supervisord.pid;pid文件路徑
nodaemon=false;啟動是否丟到前臺,設置為false,表示以daemon的方式啟動
minfds=1024;最小文件打開數,對應系統limit.conf中的nofile,默認最小為1024,最大為4096
minprocs=200;最小的進程打開數,對應系統的limit.conf中的nproc,默認為200
;umask=022;(processfilecreationumask;default022)
;user=chrism;啟動supervisord服務的用戶,默認為root
;identifier=supervisor;(supervisordidentifier,defaultis'supervisor')
;directory=/tmp;這里的目錄指的是服務的工作目錄
;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:///var/run/supervisor/supervisor.sock ; use a unix:// URL??for 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]??????; 定義一個守護進程 ,比如下面的elasticsearch
;command=/bin/cat??????????????; 啟動程序使用的命令,可以是絕對路徑或者相對路徑
;process_name=%(program_name)s ; 一個python字符串表達式,用來表示supervisor進程啟動的這個的名稱,默認值是%(program_name)s
;numprocs=1????????????????????; Supervisor啟動這個程序的多個實例,如果numprocs>1,則process_name的表達式必須包含%(process_num)s,默認是1
;directory=/tmp????????????????; supervisord在生成子進程的時候會切換到該目錄
;umask=022???????????????????? ; umask for process (default None)
;priority=999??????????????????; 權重,可以控制程序啟動和關閉時的順序,權重越低:越早啟動,越晚關閉。默認值是999
;autostart=true????????????????; 如果設置為true,當supervisord啟動的時候,進程會自動啟動
;autorestart=true??????????????; 設置為隨 supervisord 重啟而重啟,值可以是false、true、unexpected。false:進程不會自動重啟
;startsecs=10??????????????????; 程序啟動后等待多長時間后才認為程序啟動成功,默認是10秒
;startretries=3????????????????; supervisord嘗試啟動一個程序時嘗試的次數。默認是3
;exitcodes=0,2???????????????? ; 一個預期的退出返回碼,默認是0,2。
;stopsignal=QUIT?????????????? ; 當收到stop請求的時候,發送信號給程序,默認是TERM信號,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2
;stopwaitsecs=10?????????????? ; 在操作系統給supervisord發送SIGCHILD信號時等待的時間
;user=chrism?????????????????? ; 如果supervisord以root運行,則會使用這個設置用戶啟動子程序
;redirect_stderr=true??????????; 如果設置為true,進程則會把標準錯誤輸出到supervisord后臺的標準輸出文件描述符
;stdout_logfile=/a/path????????; 把進程的標準輸出寫入文件中,如果stdout_logfile沒有設置或者設置為AUTO,則supervisor會自動選擇一個文件位置
;stdout_logfile_maxbytes=1MB?? ; 標準輸出log文件達到多少后自動進行輪轉,單位是KB、MB、GB。如果設置為0則表示不限制日志文件大小
;stdout_logfile_backups=10???? ; 標準輸出日志輪轉備份的數量,默認是10,如果設置為0,則不備份
;stdout_capture_maxbytes=1MB?? ; 當進程處于stderr capture mode模式的時候,寫入FIFO隊列的最大bytes值,單位可以是KB、MB、GB
;stdout_events_enabled=false?? ; 如果設置為true,當進程在寫它的stderr
;stderr_logfile=/a/path????????; 把進程的錯誤日志輸出一個文件中,除非redirect_stderr參數被設置為true
;stderr_logfile_maxbytes=1MB?? ; 錯誤log文件達到多少后自動進行輪轉,單位是KB、MB、GB。如果設置為0則表示不限制日志文件大小
;stderr_logfile_backups=10???? ; 錯誤日志輪轉備份的數量,默認是10,如果設置為0,則不備份
;stderr_capture_maxbytes=1MB?? ; 當進程處于stderr capture mode模式的時候,寫入FIFO隊列的最大bytes值,單位可以是KB、MB、GB
;stderr_events_enabled=false?? ; 如果設置為true,當進程在寫它的stderr到文件描述符的時候,PROCESS_LOG_STDERR事件會被觸發
;environment=A=1,B=2?????????? ; 一個k/v對的list列表
;serverurl=AUTO????????????????; 是否允許子進程和內部的HTTP服務通訊,如果設置為AUTO,supervisor會自動的構造一個url
; 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.
#這個地方是自定義一個守護進程
[program:elasticsearch]?????????????????????? ; 定義一個守護進程 elasticsearch
environment=ES_HOME=/usr/local/elasticsearch??; 設置ES_HOME 環境變量
user=elk??????????????????????????????????????; 啟動elasticsearch 的用戶
directory=/usr/local/elasticsearch????????????; 進入到這個目錄中
command=/usr/local/elasticsearch/bin/elasticsearch ; 執行啟動命令
numprocs=1????????????????????????????????????; Supervisor啟動這個程序的多個實例,如果numprocs>1,則process_name的表達式必須包含%(process_num)s,默認是1
autostart=true????????????????????????????????; 設置為隨 supervisord 啟動而啟動
autorestart=true??????????????????????????????; 設置為隨 supervisord 重啟而重啟
startretries=3????????????????????????????????; 設置elasticsearch 重啟的重試次數
priority=1????????????????????????????????????; 權重,可以控制程序啟動和關閉時的順序,權重越低:越早啟動,越晚關閉。默認值是999
;[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;eventbufferqueuesize(default10)
;directory=/tmp;directorytocwdtobeforeexec(defnocwd)
;umask=022;umaskforprocess(defaultNone)
;priority=-1;therelativestartpriority(default-1)
;autostart=true;startatsupervisordstart(default:true)
;autorestart=unexpected;restartatunexpectedquit(default:unexpected)
;startsecs=10;numberofsecsprogmuststayrunning(def.1)
;startretries=3;max# of serial start failures (default 3)
;exitcodes=0,2;'expected'exitcodesforprocess(default0,2)
;stopsignal=QUIT;signalusedtokillprocess(defaultTERM)
;stopwaitsecs=10;maxnumsecstowaitb4SIGKILL(default10)
;user=chrism;setuidtothisUNIXaccounttoruntheprogram
;redirect_stderr=true;redirectprocstderrtostdout(defaultfalse)
;stdout_logfile=/a/path;stdoutlogpath,NONEfornone;defaultAUTO
;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;emiteventsonstdoutwrites(defaultfalse)
;stderr_logfile=/a/path;stderrlogpath,NONEfornone;defaultAUTO
;stderr_logfile_maxbytes=1MB;max# logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups;# of stderr logfile backups (default 10)
;stderr_events_enabled=false;emiteventsonstderrwrites(defaultfalse)
;environment=A=1,B=2;processenvironmentadditions
;serverurl=AUTO;overrideserverurlcomputation(childutils)
;Thebelowsamplegroupsectionshowsallpossiblegroupvalues,
;createoneormore'real'group:sectionstocreate"heterogeneous"
;processgroups.
;[group:thegroupname];服務組管理,可以將多個服務名寫到這里管理(組名自定義)
;programs=progname1,progname2;上面配置好的服務名,比如elasticsearch,kibana,logstash
;priority=999;therelativestartpriority(default999)
;The[include]sectioncanjustcontainthe"files"setting.This
;settingcanlistmultiplefiles(separatedbywhitespaceor
;newlines).Itcanalsocontainwildcards.Thefilenamesare
;interpretedasrelativetothisfile.Includedfiles *cannot*
;includefilesthemselves.
[include]
files=supervisord.d/*.ini
2.1 為了不將所有新增配置信息全寫在一個配置文件里,這里新建一個文件夾
mkdir /usr/supervisor/supervisord.d/
2.2 修改系統配置文件
vim /usr/supervisor/supervisord.conf
2.3 include 2.1中新建的supervisord.d文件夾下所有的conf
[include]
files = /usr/supervisor/supervisord.d/*.conf
1
2
[include]
files=/usr/supervisor/supervisord.d/*.conf
2.4 若需要web查看進程,則去掉[inet_http_server]的注釋
[inet_http_server]
port=127.0.0.1:9001 ;IP按需配置
username=user
password=123
1
2
3
4
[inet_http_server]
port=127.0.0.1:9001;IP按需配置
username=user
password=123
運行Supervisor
3.0 啟動supervisord
supervisord -c /usr/supervisor/supervisord.conf
1
supervisord-c/usr/supervisor/supervisord.conf
3.1 查看監聽
lsof -i:9001
1
lsof-i:9001
到這一步,就可以通過 http://ip:9001/ 查看supervisor的web界面了,只不過目前還沒有加入任何監控程序。
3.2 增加一個配置文件,以便supervisor用來監控程序
cat > /usr/supervisor/supervisord.d/supervisor_test_one.conf
在新建的supervisor_test_one.conf文件中添加以下配置
[program:test_one]
command=java -jar /data/smallvideo/supervisor/taskApp-exec.jar TaskTestOne ; 被監控的進程路徑
priority=1 ; 數字越高,優先級越高
numprocs=1 ; 啟動幾個進程
autostart=true ; 隨著supervisord的啟動而啟動
autorestart=true ; 自動重啟
startretries=10 ; 啟動失敗時的最多重試次數
exitcodes=0 ; 正常退出代碼
stopsignal=KILL ; 用來殺死進程的信號
stopwaitsecs=10 ; 發送SIGKILL前的等待時間
redirect_stderr=true ; 重定向stderr到stdout
[program:test_two]
command=java -jar /data/smallvideo/supervisor/taskApp-exec.jar TaskTestTwo ; 被監控的進程路徑
priority=1 ; 數字越高,優先級越高
numprocs=1 ; 啟動幾個進程
autostart=true ; 隨著supervisord的啟動而啟動
autorestart=true ; 自動重啟
startretries=10 ; 啟動失敗時的最多重試次數
exitcodes=0 ; 正常退出代碼
stopsignal=KILL ; 用來殺死進程的信號
stopwaitsecs=10 ; 發送SIGKILL前的等待時間
redirect_stderr=true ; 重定向stderr到stdout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[program:test_one]
command=java-jar/data/smallvideo/supervisor/taskApp-exec.jarTaskTestOne;被監控的進程路徑
priority=1;數字越高,優先級越高
numprocs=1;啟動幾個進程
autostart=true;隨著supervisord的啟動而啟動
autorestart=true;自動重啟
startretries=10;啟動失敗時的最多重試次數
exitcodes=0;正常退出代碼
stopsignal=KILL;用來殺死進程的信號
stopwaitsecs=10;發送SIGKILL前的等待時間
redirect_stderr=true;重定向stderr到stdout
[program:test_two]
command=java-jar/data/smallvideo/supervisor/taskApp-exec.jarTaskTestTwo;被監控的進程路徑
priority=1;數字越高,優先級越高
numprocs=1;啟動幾個進程
autostart=true;隨著supervisord的啟動而啟動
autorestart=true;自動重啟
startretries=10;啟動失敗時的最多重試次數
exitcodes=0;正常退出代碼
stopsignal=KILL;用來殺死進程的信號
stopwaitsecs=10;發送SIGKILL前的等待時間
redirect_stderr=true;重定向stderr到stdout
3.3 supervisor配置文件詳解
- command:啟動程序使用的命令,可以是絕對路徑或者相對路徑
- process_name:一個python字符串表達式,用來表示supervisor進程啟動的這個的名稱,默認值是%(program_name)s
- numprocs:Supervisor啟動這個程序的多個實例,如果numprocs>1,則process_name的表達式必須包含%(process_num)s,默認是1
- numprocs_start:一個int偏移值,當啟動實例的時候用來計算numprocs的值
- priority:權重,可以控制程序啟動和關閉時的順序,權重越低:越早啟動,越晚關閉。默認值是999
- autostart:如果設置為true,當supervisord啟動的時候,進程會自動重啟。
- autorestart:值可以是false、true、unexpected。false:進程不會自動重啟,unexpected:當程序退出時的退出碼不是exitcodes中定義的時,進程會重啟,true:進程會無條件重啟當退出的時候。
- startsecs:程序啟動后等待多長時間后才認為程序啟動成功
- startretries:supervisord嘗試啟動一個程序時嘗試的次數。默認是3
- exitcodes:一個預期的退出返回碼,默認是0,2。
- stopsignal:當收到stop請求的時候,發送信號給程序,默認是TERM信號,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2。
- stopwaitsecs:在操作系統給supervisord發送SIGCHILD信號時等待的時間
- stopasgroup:如果設置為true,則會使supervisor發送停止信號到整個進程組
- killasgroup:如果設置為true,則在給程序發送SIGKILL信號的時候,會發送到整個進程組,它的子進程也會受到影響。
- user:如果supervisord以root運行,則會使用這個設置用戶啟動子程序
- redirect_stderr:如果設置為true,進程則會把標準錯誤輸出到supervisord后臺的標準輸出文件描述符。
- stdout_logfile:把進程的標準輸出寫入文件中,如果stdout_logfile沒有設置或者設置為AUTO,則supervisor會自動選擇一個文件位置。
- stdout_logfile_maxbytes:標準輸出log文件達到多少后自動進行輪轉,單位是KB、MB、GB。如果設置為0則表示不限制日志文件大小
- stdout_logfile_backups:標準輸出日志輪轉備份的數量,默認是10,如果設置為0,則不備份
- stdout_capture_maxbytes:當進程處于stderr capture mode模式的時候,寫入FIFO隊列的最大bytes值,單位可以是KB、MB、GB
- stdout_events_enabled:如果設置為true,當進程在寫它的stderr到文件描述符的時候,PROCESS_LOG_STDERR事件會被觸發
- stderr_logfile:把進程的錯誤日志輸出一個文件中,除非redirect_stderr參數被設置為true
- stderr_logfile_maxbytes:錯誤log文件達到多少后自動進行輪轉,單位是KB、MB、GB。如果設置為0則表示不限制日志文件大小
- stderr_logfile_backups:錯誤日志輪轉備份的數量,默認是10,如果設置為0,則不備份
- stderr_capture_maxbytes:當進程處于stderr capture mode模式的時候,寫入FIFO隊列的最大bytes值,單位可以是KB、MB、GB
- stderr_events_enabled:如果設置為true,當進程在寫它的stderr到文件描述符的時候,PROCESS_LOG_STDERR事件會被觸發
- environment:一個k/v對的list列表
- directory:supervisord在生成子進程的時候會切換到該目錄
- umask:設置進程的umask
- serverurl:是否允許子進程和內部的HTTP服務通訊,如果設置為AUTO,supervisor會自動的構造一個url
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-command:啟動程序使用的命令,可以是絕對路徑或者相對路徑
-process_name:一個python字符串表達式,用來表示supervisor進程啟動的這個的名稱,默認值是%(program_name)s
-numprocs:Supervisor啟動這個程序的多個實例,如果numprocs>1,則process_name的表達式必須包含%(process_num)s,默認是1
-numprocs_start:一個int偏移值,當啟動實例的時候用來計算numprocs的值
-priority:權重,可以控制程序啟動和關閉時的順序,權重越低:越早啟動,越晚關閉。默認值是999
-autostart:如果設置為true,當supervisord啟動的時候,進程會自動重啟。
-autorestart:值可以是false、true、unexpected。false:進程不會自動重啟,unexpected:當程序退出時的退出碼不是exitcodes中定義的時,進程會重啟,true:進程會無條件重啟當退出的時候。
-startsecs:程序啟動后等待多長時間后才認為程序啟動成功
-startretries:supervisord嘗試啟動一個程序時嘗試的次數。默認是3
-exitcodes:一個預期的退出返回碼,默認是0,2。
-stopsignal:當收到stop請求的時候,發送信號給程序,默認是TERM信號,也可以是HUP,INT,QUIT,KILL,USR1,orUSR2。
-stopwaitsecs:在操作系統給supervisord發送SIGCHILD信號時等待的時間
-stopasgroup:如果設置為true,則會使supervisor發送停止信號到整個進程組
-killasgroup:如果設置為true,則在給程序發送SIGKILL信號的時候,會發送到整個進程組,它的子進程也會受到影響。
-user:如果supervisord以root運行,則會使用這個設置用戶啟動子程序
-redirect_stderr:如果設置為true,進程則會把標準錯誤輸出到supervisord后臺的標準輸出文件描述符。
-stdout_logfile:把進程的標準輸出寫入文件中,如果stdout_logfile沒有設置或者設置為AUTO,則supervisor會自動選擇一個文件位置。
-stdout_logfile_maxbytes:標準輸出log文件達到多少后自動進行輪轉,單位是KB、MB、GB。如果設置為0則表示不限制日志文件大小
-stdout_logfile_backups:標準輸出日志輪轉備份的數量,默認是10,如果設置為0,則不備份
-stdout_capture_maxbytes:當進程處于stderrcapturemode模式的時候,寫入FIFO隊列的最大bytes值,單位可以是KB、MB、GB
-stdout_events_enabled:如果設置為true,當進程在寫它的stderr到文件描述符的時候,PROCESS_LOG_STDERR事件會被觸發
-stderr_logfile:把進程的錯誤日志輸出一個文件中,除非redirect_stderr參數被設置為true
-stderr_logfile_maxbytes:錯誤log文件達到多少后自動進行輪轉,單位是KB、MB、GB。如果設置為0則表示不限制日志文件大小
-stderr_logfile_backups:錯誤日志輪轉備份的數量,默認是10,如果設置為0,則不備份
-stderr_capture_maxbytes:當進程處于stderrcapturemode模式的時候,寫入FIFO隊列的最大bytes值,單位可以是KB、MB、GB
-stderr_events_enabled:如果設置為true,當進程在寫它的stderr到文件描述符的時候,PROCESS_LOG_STDERR事件會被觸發
-environment:一個k/v對的list列表
-directory:supervisord在生成子進程的時候會切換到該目錄
-umask:設置進程的umask
-serverurl:是否允許子進程和內部的HTTP服務通訊,如果設置為AUTO,supervisor會自動的構造一個url
監控demotest程序示例:
[program:demotest]
command=python demotest.py 10000 ; 被監控的進程啟動命令
directory=/root/ ; 執行前要不要先cd到目錄去,一般不用
priority=1 ;數字越高,優先級越高
numprocs=1 ; 啟動幾個進程
autostart=true ; 隨著supervisord的啟動而啟動
autorestart=true ; 自動重啟。。當然要選上了
startretries=10 ; 啟動失敗時的最多重試次數
exitcodes=0 ; 正常退出代碼(是說退出代碼是這個時就不再重啟了嗎?待確定)
stopsignal=KILL ; 用來殺死進程的信號
stopwaitsecs=10 ; 發送SIGKILL前的等待時間
redirect_stderr=true ; 重定向stderr到stdout
1
2
3
4
5
6
7
8
9
10
11
12
[program:demotest]
command=pythondemotest.py10000;被監控的進程啟動命令
directory=/root/;執行前要不要先cd到目錄去,一般不用
priority=1;數字越高,優先級越高
numprocs=1;啟動幾個進程
autostart=true;隨著supervisord的啟動而啟動
autorestart=true;自動重啟。。當然要選上了
startretries=10;啟動失敗時的最多重試次數
exitcodes=0;正常退出代碼(是說退出代碼是這個時就不再重啟了嗎?待確定)
stopsignal=KILL;用來殺死進程的信號
stopwaitsecs=10;發送SIGKILL前的等待時間
redirect_stderr=true;重定向stderr到stdout
3.4 重啟supervisor
supervisorctl -c /usr/supervisor/supervisord.conf
1
supervisorctl-c/usr/supervisor/supervisord.conf
現在就可以在http://ip:9001/中訪問test_one的程序了。
3.5 supervisor開機自動啟動
3.5.1 在目錄/usr/lib/systemd/system/ 新建文件supervisord.service,并添加配置內容
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.target
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /usr/supervisor/supervisord.conf ;開機啟動時執行
ExecStop=/usr/bin/supervisord shutdown
ExecReload=/usr/bin/supervisord reload
killMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=ProcessMonitoringandControlDaemon
After=rc-local.servicenss-user-lookup.target
[Service]
Type=forking
ExecStart=/usr/bin/supervisord-c/usr/supervisor/supervisord.conf;開機啟動時執行
ExecStop=/usr/bin/supervisordshutdown
ExecReload=/usr/bin/supervisordreload
killMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
3.5.2 啟動服務
systemctl enable supervisord
3.5.3 驗證一下是否為開機啟動
systemctl is-enabled supervisord
Supervisor周邊
4.1 supervisor常用命令
### 查看supervisorctl支持的命令
# supervisorctl help
default commands (type help ):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
### 查看當前運行的進程列表
# supervisorctl status
1
2
3
4
5
6
7
8
9
10
### 查看supervisorctl支持的命令
# supervisorctl help
defaultcommands(typehelp):
=====================================
addexitopenreloadrestartstarttail
availfgpidremoveshutdownstatusupdate
clearmaintailquitrereadsignalstopversion
### 查看當前運行的進程列表
# supervisorctl status
update 更新新的配置到supervisord(不會重啟原來已運行的程序)
reload,載入所有配置文件,并按新的配置啟動、管理所有進程(會重啟原來已運行的程序)
start xxx: 啟動某個進程
restart xxx: 重啟某個進程
stop xxx: 停止某一個進程(xxx),xxx為[program:theprogramname]里配置的值
stop groupworker: 重啟所有屬于名為groupworker這個分組的進程(start,restart同理)
stop all,停止全部進程,注:start、restart、stop都不會載入最新的配置文
reread,當一個服務由自動啟動修改為手動啟動時執行一下就ok
ps:有些版本并不支持supervisorctl ,可以通過supervisorctl -c /usr/supervisor/supervisord.conf喚起命令,格式如上,實際效果如下。
4.2 如果supervisorCPU和內存占用率特別高,導致機器卡死。
嘗試注釋掉2.4中的web。
4.3 Unlinking stale socket /tmp/supervisor.sock
解決方案,執行unlink /tmp/supervisor.sock
總結
以上是生活随笔為你收集整理的supervisor监控php进程程序,详解Supervisor进程守护监控(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在php中图片放大怎么实现,用PHP实现
- 下一篇: mysql 中 end like,MyS