溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux系統(tǒng)下Supervisor的基本用法介紹

發(fā)布時(shí)間:2021-08-05 20:59:34 來(lái)源:億速云 閱讀:193 作者:chen 欄目:系統(tǒng)運(yùn)維

這篇文章主要介紹“Linux系統(tǒng)下Supervisor的基本用法介紹”,在日常操作中,相信很多人在Linux系統(tǒng)下Supervisor的基本用法介紹問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Linux系統(tǒng)下Supervisor的基本用法介紹”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

Supervisor是一個(gè)C/S系統(tǒng),它允許用戶在類(lèi)UNIX系統(tǒng)上控制一些進(jìn)程。它具有以下特性:

    1    簡(jiǎn)單

            Supervisor通過(guò)INI格式配置文件進(jìn)行配置,很容易掌握,它為每個(gè)進(jìn)程提供了很多配置選項(xiàng),可以使你很容易的重啟進(jìn)程或者自動(dòng)的輪轉(zhuǎn)日志。

    2    統(tǒng)一

            Supervisor提供了一種統(tǒng)一的方式來(lái)start、stop、monitor你的進(jìn)程, 進(jìn)程可以單獨(dú)控制,也可以成組的控制。你可以在本地或者遠(yuǎn)程命令行或者web接口來(lái)配置Supervisor。

    3    有效

            Supervisor通過(guò)fork/exec啟動(dòng)它的子進(jìn)程,子進(jìn)程并不是守護(hù)進(jìn)程。當(dāng)一個(gè)進(jìn)程終止的時(shí)候,操作系統(tǒng)會(huì)立即給Supervisor發(fā)送一個(gè)信號(hào),而不是像其他解決方案依賴PID文件。

    4    可擴(kuò)展

            Supervisor包含一個(gè)簡(jiǎn)單的事件通知協(xié)議,因此任何程序都可以監(jiān)控它,而且提供一個(gè)XML-RPC控制接口。

    5    兼容

            除了windows平臺(tái),其他平臺(tái)都可運(yùn)行。

Supervisor系統(tǒng)的組件:

    supervisord:

        服務(wù)會(huì)啟動(dòng)supervisord服務(wù),它負(fù)責(zé)調(diào)用自己?jiǎn)?dòng)子程序,響應(yīng)來(lái)自客戶端的命令,重啟crash或者退出的進(jìn)程,記錄進(jìn)程的輸出信息,收集事件信息。該服務(wù)的配置文件在/etc/supervisor/supervisord.conf

    supervisorctl:

        客戶端的命令行工具,提供一個(gè)類(lèi)shell接口,通過(guò)它你可以連接到不同的supervisord進(jìn)程上來(lái)管理它們各自的子程序??蛻舳嗣钔ㄟ^(guò)UNIX socket或者TCP來(lái)和服務(wù)通訊,服務(wù)端可以要求客戶端提供身份驗(yàn)證之后才能進(jìn)行操作([supervisorctl])。

    Web Server:

        一個(gè)小的web接口被集成進(jìn)了supervisorctl,重啟supervisord之后就可以訪問(wèn)了([inet_http_server])。   

    XML-RPC Interface:

        就像HTTP提供WEB UI一樣,同時(shí)還提供了XML-RPC接口來(lái)控制supervisor和由它運(yùn)行的程序。

安裝:

        supervisor是python編寫(xiě)的,顯然用easy_install、pip都可以安裝,我懶,直接apt-get了,在ubuntu14.04下安裝完后版本是3.0b2。

Supervisor服務(wù)的啟動(dòng)

        其實(shí)啟動(dòng)Supervisor很簡(jiǎn)單,supervisord -h看看就知道了,最簡(jiǎn)單的-c根配置文件即可:

代碼如下:


supervisord -- run a set of applications as daemons.

Usage: /usr/bin/supervisord [options]


Options:
-c/--configuration FILENAME -- configuration file
-n/--nodaemon -- run in the foreground (same as 'nodaemon true' in config file)
-h/--help -- print this usage message and exit
-v/--version -- print supervisord version number and exit
-u/--user USER -- run supervisord as this user (or numeric uid)
-m/--umask UMASK -- use this umask for daemon subprocess (default is 022)
-d/--directory DIRECTORY -- directory to chdir to when daemonized
-l/--logfile FILENAME -- use FILENAME as logfile path
-y/--logfile_maxbytes BYTES -- use BYTES to limit the max size of logfile
-z/--logfile_backups NUM -- number of backups to keep when max bytes reached
-e/--loglevel LEVEL -- use LEVEL as log level (debug,info,warn,error,critical)
-j/--pidfile FILENAME -- write a pid file for the daemon process to FILENAME
-i/--identifier STR -- identifier used for this instance of supervisord
-q/--childlogdir DIRECTORY -- the log directory for child process logs
-k/--nocleanup --  prevent the process from performing cleanup (removal of
                   old automatic child log files) at startup.
-a/--minfds NUM -- the minimum number of file descriptors for start success
-t/--strip_ansi -- strip ansi escape codes from process output
--minprocs NUM  -- the minimum number of processes available for start success
--profile_options OPTIONS -- run supervisord under profiler and output
                             results based on OPTIONS, which  is a comma-sep'd
                             list of 'cumulative', 'calls', and/or 'callers',
                             e.g. 'cumulative,callers')
        不過(guò)既然我這懶人是用apt-get安裝的,那安裝包的規(guī)范必然符合debian系的風(fēng)格了,直接service supervisor start即可啟動(dòng),且慢,我們還沒(méi)配置supervisor的配置文件呢,啟動(dòng)了也沒(méi)什么效果。我們后面詳解配置文件的配置。

supervisorctl客戶端的使用

        supervisorctl有兩種模式,一種是交互模式,一種是命令行模式。在命令行輸入supervisorctl直接回車(chē),即可進(jìn)入交互模式。

代碼如下:


supervisorctl -- control applications run by supervisord from the cmd line.


Usage: /usr/bin/supervisorctl [options] [action [arguments]]
 
Options:
-c/--configuration -- configuration file path (default /etc/supervisor.conf)
-h/--help -- print usage message and exit
-i/--interactive -- start an interactive shell after executing commands
-s/--serverurl URL -- URL on which supervisord server is listening
     (default "http://localhost:9001"). 
-u/--username -- username to use for authentication with server
-p/--password -- password to use for authentication with server
-r/--history-file -- keep a readline history (if readline is available)

代碼如下:


action [arguments] -- see below


Actions are commands like "tail" or "stop".  If -i is specified or no action is
specified on the command line, a "shell" interpreting actions typed
interactively is started.  Use the action "help" to find out about available
actions.
Supervisor的開(kāi)機(jī)自啟動(dòng)

        如果你是pip或者easy_install安裝的,開(kāi)機(jī)服務(wù)自啟動(dòng)還真是個(gè)麻煩事,不過(guò)官方已經(jīng)給出一些rc.d腳本示例了,在github上,不過(guò)由于我是apt-get安裝的,顯然這個(gè)開(kāi)機(jī)自啟動(dòng)是不用擔(dān)心的,用debian的update-rc.d即可搞定。

Supervisor的進(jìn)程安全

        既然是用Supervisor來(lái)保證其他進(jìn)程的正常運(yùn)行,但是萬(wàn)一Supervisor進(jìn)程掛了怎么辦,我們可以使用daemontools來(lái)保證Supervisor正常運(yùn)行,就類(lèi)似于監(jiān)控的監(jiān)控。

supervisord的配置文件主要由幾個(gè)配置段構(gòu)成,配置項(xiàng)以K/V格式呈現(xiàn),下面就看看各個(gè)配置端需要怎樣配置:

[unix_http_server]

    在該配置塊的參數(shù)項(xiàng)表示的是一個(gè)監(jiān)聽(tīng)在socket上的HTTP server,如果[unix_http_server]塊不在配置文件中,則不會(huì)啟動(dòng)基于socket的HTTP server。

file:一個(gè)unix domain socket的文件路徑,HTTP/XML-RPC會(huì)監(jiān)聽(tīng)在這上面
chmod:在啟動(dòng)時(shí)修改unix domain socket的mode
chown:修改socket文件的屬主
username:HTTP server在認(rèn)證時(shí)的用戶名
password:認(rèn)證密碼<span style="font-family:'Microsoft YaHei';font-size:16px;line-height:1.5;"></span>
eg:

代碼如下:


[unix_http_server]
file = /tmp/supervisor.sock
chmod = 0777
chown= nobody:nogroup
username = user
password = 123
[inet_http_server]


    在該配置塊的參數(shù)項(xiàng)表示的是一個(gè)監(jiān)聽(tīng)在TCP上的HTTP server,如果[inet_http_server]塊不在配置文件中,則不會(huì)啟動(dòng)基于TCP的HTTP server。

port:TCP監(jiān)聽(tīng)的地址和端口(ip:port),這個(gè)地址會(huì)被HTTP/XML-RPC監(jiān)聽(tīng)
username:HTTP server在認(rèn)證時(shí)的用戶名
password:認(rèn)證密碼
eg:

代碼如下:


[inet_http_server]
port = 127.0.0.1:9001
username = user
password = 123
[supervisord]


該配置塊的參數(shù)項(xiàng)是關(guān)于supervisord進(jìn)程的全局配置項(xiàng)。
logfile:log文件路徑
logfile_maxbytes:log文件達(dá)到多少后自動(dòng)進(jìn)行輪轉(zhuǎn),單位是KB、MB、GB。如果設(shè)置為0則表示不限制日志文件大小
logfile_backups:輪轉(zhuǎn)日志備份的數(shù)量,默認(rèn)是10,如果設(shè)置為0,則不備份
loglevel:error、warn、info、debug、trace、blather、critical
pidfile:pid文件路徑
umask:umask值,默認(rèn)022
nodaemon:如果設(shè)置為true,則supervisord在前臺(tái)啟動(dòng),而不是以守護(hù)進(jìn)程啟動(dòng)
minfds:supervisord在成功啟動(dòng)前可用的最小文件描述符數(shù)量,默認(rèn)1024
minprocs:supervisord在成功啟動(dòng)前可用的最小進(jìn)程描述符數(shù)量,默認(rèn)200
nocleanup:防止supervisord在啟動(dòng)的時(shí)候清除已經(jīng)存在的子進(jìn)程日志文件
childlogdir:自動(dòng)啟動(dòng)的子進(jìn)程的日志目錄
user:supervisord的運(yùn)行用戶
directory:supervisord以守護(hù)進(jìn)程運(yùn)行的時(shí)候切換到這個(gè)目錄
strip_ansi:消除子進(jìn)程日志文件中的轉(zhuǎn)義序列
environment:一個(gè)k/v對(duì)的list列表
eg:

代碼如下:


[supervisord]
logfile = /tmp/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /tmp/supervisord.pid
nodaemon = false
minfds = 1024
minprocs = 200
umask = 022
user = chrism
identifier = supervisor
directory = /tmp
nocleanup = true
childlogdir = /tmp
strip_ansi = false
environment = KEY1="value1",KEY2="value2"
[supervisorctl]


    該配置塊參數(shù)是關(guān)于supervisorctl

serverurl:這個(gè)url是用來(lái)訪問(wèn)supervisord服務(wù)的(http://localhost:9001),或者是個(gè)sockets文件(unix:///absolute/path/to/file.sock)
username:supervisorctl連接supervisord的認(rèn)證用戶
password:認(rèn)證密碼
prompt:默認(rèn)是supervisor
history_file:history文件路徑
eg:

代碼如下:


[supervisorctl]
serverurl = unix:///tmp/supervisor.sock
username = chris
password = 123
prompt = mysupervisor
[program:x]


    該配置塊包含一個(gè)或者多個(gè)program段,program來(lái)表明supervisord要控制哪些程序。該配置塊的頭部是有固定格式的,一個(gè)關(guān)鍵字program,后面跟著一個(gè)冒號(hào),接下來(lái)才是程序名。例如:[program:foo],foo就是程序名,在使用supervisorctl來(lái)操作程序的時(shí)候,就是以foo來(lái)標(biāo)明的。

command:?jiǎn)?dòng)程序使用的命令,可以是絕對(duì)路徑或者相對(duì)路徑
process_name:一個(gè)python字符串表達(dá)式,用來(lái)表示supervisor進(jìn)程啟動(dòng)的這個(gè)的名稱,默認(rèn)值是%(program_name)s
numprocs:Supervisor啟動(dòng)這個(gè)程序的多個(gè)實(shí)例,如果numprocs>1,則process_name的表達(dá)式必須包含%(process_num)s,默認(rèn)是1
numprocs_start:一個(gè)int偏移值,當(dāng)啟動(dòng)實(shí)例的時(shí)候用來(lái)計(jì)算numprocs的值
priority:權(quán)重,可以控制程序啟動(dòng)和關(guān)閉時(shí)的順序,權(quán)重越低:越早啟動(dòng),越晚關(guān)閉。默認(rèn)值是999
autostart:如果設(shè)置為true,當(dāng)supervisord啟動(dòng)的時(shí)候,進(jìn)程會(huì)自動(dòng)重啟。
autorestart:值可以是false、true、unexpected。false:進(jìn)程不會(huì)自動(dòng)重啟,unexpected:當(dāng)程序退出時(shí)的退出碼不是exitcodes中定義的時(shí),進(jìn)程會(huì)重啟,true:進(jìn)程會(huì)無(wú)條件重啟當(dāng)退出的時(shí)候。
startsecs:程序啟動(dòng)后等待多長(zhǎng)時(shí)間后才認(rèn)為程序啟動(dòng)成功
startretries:supervisord嘗試啟動(dòng)一個(gè)程序時(shí)嘗試的次數(shù)。默認(rèn)是3
exitcodes:一個(gè)預(yù)期的退出返回碼,默認(rèn)是0,2。
stopsignal:當(dāng)收到stop請(qǐng)求的時(shí)候,發(fā)送信號(hào)給程序,默認(rèn)是TERM信號(hào),也可以是 HUP, INT, QUIT, KILL, USR1, or USR2。
stopwaitsecs:在操作系統(tǒng)給supervisord發(fā)送SIGCHILD信號(hào)時(shí)等待的時(shí)間
stopasgroup:如果設(shè)置為true,則會(huì)使supervisor發(fā)送停止信號(hào)到整個(gè)進(jìn)程組
killasgroup:如果設(shè)置為true,則在給程序發(fā)送SIGKILL信號(hào)的時(shí)候,會(huì)發(fā)送到整個(gè)進(jìn)程組,它的子進(jìn)程也會(huì)受到影響。
user:如果supervisord以root運(yùn)行,則會(huì)使用這個(gè)設(shè)置用戶啟動(dòng)子程序
redirect_stderr:如果設(shè)置為true,進(jìn)程則會(huì)把標(biāo)準(zhǔn)錯(cuò)誤輸出到supervisord后臺(tái)的標(biāo)準(zhǔn)輸出文件描述符。
stdout_logfile:把進(jìn)程的標(biāo)準(zhǔn)輸出寫(xiě)入文件中,如果stdout_logfile沒(méi)有設(shè)置或者設(shè)置為AUTO,則supervisor會(huì)自動(dòng)選擇一個(gè)文件位置。
stdout_logfile_maxbytes:標(biāo)準(zhǔn)輸出log文件達(dá)到多少后自動(dòng)進(jìn)行輪轉(zhuǎn),單位是KB、MB、GB。如果設(shè)置為0則表示不限制日志文件大小
stdout_logfile_backups:標(biāo)準(zhǔn)輸出日志輪轉(zhuǎn)備份的數(shù)量,默認(rèn)是10,如果設(shè)置為0,則不備份
stdout_capture_maxbytes:當(dāng)進(jìn)程處于stderr capture mode模式的時(shí)候,寫(xiě)入FIFO隊(duì)列的最大bytes值,單位可以是KB、MB、GB
stdout_events_enabled:如果設(shè)置為true,當(dāng)進(jìn)程在寫(xiě)它的stderr到文件描述符的時(shí)候,PROCESS_LOG_STDERR事件會(huì)被觸發(fā)
stderr_logfile:把進(jìn)程的錯(cuò)誤日志輸出一個(gè)文件中,除非redirect_stderr參數(shù)被設(shè)置為true
stderr_logfile_maxbytes:錯(cuò)誤log文件達(dá)到多少后自動(dòng)進(jìn)行輪轉(zhuǎn),單位是KB、MB、GB。如果設(shè)置為0則表示不限制日志文件大小
stderr_logfile_backups:錯(cuò)誤日志輪轉(zhuǎn)備份的數(shù)量,默認(rèn)是10,如果設(shè)置為0,則不備份
stderr_capture_maxbytes:當(dāng)進(jìn)程處于stderr capture mode模式的時(shí)候,寫(xiě)入FIFO隊(duì)列的最大bytes值,單位可以是KB、MB、GB
stderr_events_enabled:如果設(shè)置為true,當(dāng)進(jìn)程在寫(xiě)它的stderr到文件描述符的時(shí)候,PROCESS_LOG_STDERR事件會(huì)被觸發(fā)
environment:一個(gè)k/v對(duì)的list列表
directory:supervisord在生成子進(jìn)程的時(shí)候會(huì)切換到該目錄
umask:設(shè)置進(jìn)程的umask
serverurl:是否允許子進(jìn)程和內(nèi)部的HTTP服務(wù)通訊,如果設(shè)置為AUTO,supervisor會(huì)自動(dòng)的構(gòu)造一個(gè)url
   
eg:

代碼如下:


[program:cat]
command=/bin/cat
process_name=%(program_name)s
numprocs=1
directory=/tmp
umask=022
priority=999
autostart=true
autorestart=true
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
user=chrism
redirect_stderr=false
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
environment=A="1",B="2"
serverurl=AUTO

到此,關(guān)于“Linux系統(tǒng)下Supervisor的基本用法介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI