supervisord 進程管理利器

Supervisor概述

   supervisor是一個 Client/Server模式的系統(tǒng)苫昌,允許用戶在類unix操作系統(tǒng)上監(jiān)視和控制多個進程货葬,或者可以說是多個程序因篇。supervisor與launchd,daemontools歉备,runit等程序有著相同的功能瓦戚,與其中某些程序不同的是,它并不作為“id 為 1的進程”而替代init摸吠。相反榕订,它用于控制應(yīng)用程序,像啟動其它程序一樣蜕便,通俗理解就是劫恒,把Supervisor服務(wù)管理的進程程序,它們作為supervisor的子進程來運行轿腺,而supervisor是父進程两嘴。supervisor來監(jiān)控管理子進程的啟動關(guān)閉和異常退出后的自動啟動。 

Supervisor組成部分

1)supervisord: 服務(wù)守護進程
supervisor服務(wù)器的進程名是supervisord族壳。它主要負(fù)責(zé)在自己的調(diào)用中啟動子程序憔辫,響應(yīng)客戶端的命令,重新啟動崩潰或退出的進程仿荆,記錄其子進程stdout和stderr的輸出贰您,以及生成和處理對應(yīng)于子進程生命周期中的"event"服務(wù)器進程使用的配置文件坏平,通常路徑存放在/etc/supervisord.confa中。此配置文件是INI格式的配置文件锦亦。

  1. supervisorctl:命令行客戶端
    supervisor命令行的客戶端名稱是supervisorctl舶替。它為supervisord提供了一個類似于shell的交互界面。使用supervisorctl杠园,用戶可以查看不同的supervisord進程列表顾瞪,獲取控制子進程的狀態(tài),如停止和啟動子進程
  2. Web Server:提供與supervisorctl功能相當(dāng)?shù)腤EB操作界面
    一個可以通過Web界面來查看和控制進程的狀態(tài)抛蚁,默認(rèn)監(jiān)聽在9091上陈醒。
  3. XML-RPC Interface:XML-RPC接口
    supervisor用于控制的XML-RPC接口

Supervisor安裝

$ cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
$ rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# 通過yum方式安裝supervisor
$ yum install -y supervisor
# 開機自啟動
$ systemctl enable supervisord
# 啟動
$ systemctl start supervisord

Supervisor配置文件說明

[unix_http_server]          
file=/tmp/supervisor.sock   ; socket文件的路徑,supervisorctl用XML_RPC和supervisord通信就是通過它進行
                              的瞧甩。如果不設(shè)置的話钉跷,supervisorctl也就不能用了
                              不設(shè)置的話,默認(rèn)為none肚逸。 非必須設(shè)置      
;chmod=0700                ; 這個簡單尘应,就是修改上面的那個socket文件的權(quán)限為0700
                              不設(shè)置的話,默認(rèn)為0700吼虎。 非必須設(shè)置
;chown=nobody:nogroup       ; 這個一樣,修改上面的那個socket文件的屬組為user.group
                              不設(shè)置的話苍鲜,默認(rèn)為啟動supervisord進程的用戶及屬組思灰。非必須設(shè)置
;username=user              ; 使用supervisorctl連接的時候,認(rèn)證的用戶
                               不設(shè)置的話混滔,默認(rèn)為不需要用戶洒疚。 非必須設(shè)置
;password=123               ; 和上面的用戶名對應(yīng)的密碼,可以直接使用明碼坯屿,也可以使用SHA加密
                              如:{SHA}82ab876d1387bfafe46cc1c8a2ef074eae50cb1d
                              默認(rèn)不設(shè)置油湖。。领跛。非必須設(shè)置
  
;[inet_http_server]         ; 偵聽在TCP上的socket乏德,Web Server和遠(yuǎn)程的supervisorctl都要用到他
                              不設(shè)置的話,默認(rèn)為不開啟吠昭。非必須設(shè)置
;port=127.0.0.1:9001        ; 這個是偵聽的IP和端口喊括,偵聽所有IP用 :9001或*:9001。
                              這個必須設(shè)置矢棚,只要上面的[inet_http_server]開啟了郑什,就必須設(shè)置它
;username=user              ; 這個和上面的uinx_http_server一個樣。非必須設(shè)置
;password=123               ; 這個也一個樣蒲肋。非必須設(shè)置
  
[supervisord]                ;這個主要是定義supervisord這個服務(wù)端進程的一些參數(shù)的
                              這個必須設(shè)置蘑拯,不設(shè)置钝满,supervisor就不用干活了
logfile=/tmp/supervisord.log ; 這個是supervisord這個主進程的日志路徑,注意和子進程的日志不搭嘎申窘。
                               默認(rèn)路徑$CWD/supervisord.log弯蚜,$CWD是當(dāng)前目錄。偶洋。非必須設(shè)置
logfile_maxbytes=50MB        ; 這個是上面那個日志文件的最大的大小熟吏,當(dāng)超過50M的時候,會生成一個新的日
                               志文件玄窝。當(dāng)設(shè)置為0時牵寺,表示不限制文件大小
                               默認(rèn)值是50M,非必須設(shè)置恩脂。            
logfile_backups=10           ; 日志文件保持的數(shù)量帽氓,上面的日志文件大于50M時,就會生成一個新文件俩块。文件
                               數(shù)量大于10時黎休,最初的老文件被新文件覆蓋,文件數(shù)量將保持為10
                               當(dāng)設(shè)置為0時玉凯,表示不限制文件的數(shù)量势腮。
                               默認(rèn)情況下為10。漫仆。捎拯。非必須設(shè)置
loglevel=info                ; 日志級別,有critical, error, warn, info, debug, trace, or blather等
                               默認(rèn)為info盲厌。署照。。非必須設(shè)置項
pidfile=/tmp/supervisord.pid ; supervisord的pid文件路徑吗浩。
                               默認(rèn)為$CWD/supervisord.pid建芙。。懂扼。非必須設(shè)置
nodaemon=false               ; 如果是true禁荸,supervisord進程將在前臺運行
                               默認(rèn)為false,也就是后臺以守護進程運行阀湿。屡限。。非必須設(shè)置
minfds=1024                  ; 這個是最少系統(tǒng)空閑的文件描述符炕倘,低于這個值supervisor將不會啟動钧大。
                               系統(tǒng)的文件描述符在這里設(shè)置cat /proc/sys/fs/file-max
                               默認(rèn)情況下為1024。罩旋。啊央。非必須設(shè)置
minprocs=200                 ; 最小可用的進程描述符眶诈,低于這個值supervisor也將不會正常啟動。
                              ulimit  -u這個命令瓜饥,可以查看linux下面用戶的最大進程數(shù)
                              默認(rèn)為200逝撬。。乓土。非必須設(shè)置
;umask=022                   ; 進程創(chuàng)建文件的掩碼
                               默認(rèn)為022宪潮。。非必須設(shè)置項
;user=chrism                 ; 這個參數(shù)可以設(shè)置一個非root用戶趣苏,當(dāng)我們以root用戶啟動supervisord之后狡相。
                               我這里面設(shè)置的這個用戶,也可以對supervisord進行管理
                               默認(rèn)情況是不設(shè)置食磕。尽棕。。非必須設(shè)置項
;identifier=supervisor       ; 這個參數(shù)是supervisord的標(biāo)識符彬伦,主要是給XML_RPC用的滔悉。當(dāng)你有多個
                               supervisor的時候,而且想調(diào)用XML_RPC統(tǒng)一管理单绑,就需要為每個
                               supervisor設(shè)置不同的標(biāo)識符了
                               默認(rèn)是supervisord回官。。搂橙。非必需設(shè)置
;directory=/tmp              ; 這個參數(shù)是當(dāng)supervisord作為守護進程運行的時候歉提,設(shè)置這個參數(shù)的話,啟動
                               supervisord進程之前份氧,會先切換到這個目錄
                               默認(rèn)不設(shè)置。弯屈。蜗帜。非必須設(shè)置
;nocleanup=true              ; 這個參數(shù)當(dāng)為false的時候,會在supervisord進程啟動的時候资厉,把以前子進程
                               產(chǎn)生的日志文件(路徑為AUTO的情況下)清除掉厅缺。有時候咱們想要看歷史日志,當(dāng)
                               然不想日志被清除了宴偿。所以可以設(shè)置為true
                               默認(rèn)是false湘捎,有調(diào)試需求的同學(xué)可以設(shè)置為true。窄刘。窥妇。非必須設(shè)置
;childlogdir=/tmp            ; 當(dāng)子進程日志路徑為AUTO的時候,子進程日志文件的存放路徑娩践。
                               默認(rèn)路徑是這個東西活翩,執(zhí)行下面的這個命令看看就OK了烹骨,處理的東西就默認(rèn)路徑
                               python -c "import tempfile;print tempfile.gettempdir()"
                               非必須設(shè)置
;environment=KEY="value"     ; 這個是用來設(shè)置環(huán)境變量的,supervisord在linux中啟動默認(rèn)繼承了linux的
                               環(huán)境變量材泄,在這里可以設(shè)置supervisord進程特有的其他環(huán)境變量沮焕。
                               supervisord啟動子進程時,子進程會拷貝父進程的內(nèi)存空間內(nèi)容拉宗。 所以設(shè)置的
                               這些環(huán)境變量也會被子進程繼承峦树。
                               小例子:environment=name="haha",age="hehe"
                               默認(rèn)為不設(shè)置。旦事。魁巩。非必須設(shè)置
;strip_ansi=false            ; 這個選項如果設(shè)置為true,會清除子進程日志中的所有ANSI 序列族檬。什么是ANSI
                               序列呢歪赢?就是我們的\n,\t這些東西。
                               默認(rèn)為false单料。埋凯。。非必須設(shè)置
  
; 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]    ;這個選項是給XML_RPC用的扫尖,當(dāng)然你如果想使用supervisord或者web server 這
                              個選項必須要開啟的
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
  
[supervisorctl]              ;這個主要是針對supervisorctl的一些配置
serverurl=unix:///tmp/supervisor.sock ; 這個是supervisorctl本地連接supervisord的時候白对,本地UNIX socket
                                        路徑,注意這個是和前面的[unix_http_server]對應(yīng)的
                                        默認(rèn)值就是unix:///tmp/supervisor.sock换怖。甩恼。非必須設(shè)置
;serverurl=http://127.0.0.1:9001 ; 這個是supervisorctl遠(yuǎn)程連接supervisord的時候,用到的TCP socket路徑
                                   注意這個和前面的[inet_http_server]對應(yīng)
                                   默認(rèn)就是http://127.0.0.1:9001沉颂。条摸。。非必須項
                                 
;username=chris              ; 用戶名
                               默認(rèn)空铸屉。钉蒲。非必須設(shè)置
;password=123                ; 密碼
                              默認(rèn)空。彻坛。非必須設(shè)置
;prompt=mysupervisor         ; 輸入用戶名密碼時候的提示符
                               默認(rèn)supervisor顷啼。。非必須設(shè)置
;history_file=~/.sc_history  ; 這個參數(shù)和shell中的history類似昌屉,我們可以用上下鍵來查找前面執(zhí)行過的命令
                               默認(rèn)是no file的钙蒙。。所以我們想要有這種功能间驮,必須指定一個文件躬厌。。竞帽。非
                               必須設(shè)置
  
; 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]      ;這個就是咱們要管理的子進程了烤咧,":"后面的是名字偏陪,最好別亂寫和實際進程
                                有點關(guān)聯(lián)最好。這樣的program我們可以設(shè)置一個或多個煮嫌,一個program就是
                                要被管理的一個進程
;command=/bin/cat              ; 這個就是我們的要啟動進程的命令路徑了笛谦,可以帶參數(shù)
                                例子:/home/test.py -a 'hehe'
                                有一點需要注意的是,我們的command只能是那種在終端運行的進程昌阿,不能是
                                守護進程饥脑。這個想想也知道了,比如說command=service httpd start懦冰。
                                httpd這個進程被linux的service管理了灶轰,我們的supervisor再去啟動這個命令
                                這已經(jīng)不是嚴(yán)格意義的子進程了。
                                這個是個必須設(shè)置的項
;process_name=%(program_name)s ; 這個是進程名刷钢,如果我們下面的numprocs參數(shù)為1的話笋颤,就不用管這個參數(shù)
                                 了,它默認(rèn)值%(program_name)s也就是上面的那個program冒號后面的名字内地,
                                 但是如果numprocs為多個的話伴澄,那就不能這么干了。想想也知道阱缓,不可能每個
                                 進程都用同一個進程名吧非凌。
  
                                  
;numprocs=1                    ; 啟動進程的數(shù)目。當(dāng)不為1時荆针,就是進程池的概念敞嗡,注意process_name的設(shè)置
                                 默認(rèn)為1    。航背。非必須設(shè)置
;directory=/tmp                ; 進程運行前喉悴,會前切換到這個目錄
                                 默認(rèn)不設(shè)置。玖媚。箕肃。非必須設(shè)置
;umask=022                     ; 進程掩碼,默認(rèn)none最盅,非必須
;priority=999                  ; 子進程啟動關(guān)閉優(yōu)先級突雪,優(yōu)先級低的起惕,最先啟動涡贱,關(guān)閉的時候最后關(guān)閉
                                 默認(rèn)值為999 。惹想。非必須設(shè)置
;autostart=true                ; 如果是true的話问词,子進程將在supervisord啟動后被自動啟動
                                 默認(rèn)就是true   。嘀粱。非必須設(shè)置
;autorestart=unexpected        ; 這個是設(shè)置子進程掛掉后自動重啟的情況激挪,有三個選項辰狡,false,unexpected
                                 和true。如果為false的時候垄分,無論什么情況下宛篇,都不會被重新啟動,
                                 如果為unexpected薄湿,只有當(dāng)進程的退出碼不在下面的exitcodes里面定義的退
                                 出碼的時候叫倍,才會被自動重啟。當(dāng)為true的時候豺瘤,只要子進程掛掉吆倦,將會被無
                                 條件的重啟
;startsecs=1                   ; 這個選項是子進程啟動多少秒之后,此時狀態(tài)如果是running坐求,則我們認(rèn)為啟
                                 動成功了
                                 默認(rèn)值為1 蚕泽。。非必須設(shè)置
;startretries=3                ; 當(dāng)進程啟動失敗后桥嗤,最大嘗試啟動的次數(shù)须妻。。當(dāng)超過3次后砸逊,supervisor將把
                                 此進程的狀態(tài)置為FAIL
                                 默認(rèn)值為3 璧南。。非必須設(shè)置
;exitcodes=0,2                 ; 注意和上面的的autorestart=unexpected對應(yīng)师逸。司倚。exitcodes里面的定義的
                                 退出碼是expected的。
;stopsignal=QUIT               ; 進程停止信號篓像,可以為TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信號
                                  默認(rèn)為TERM 动知。。當(dāng)用設(shè)定的信號去干掉進程员辩,退出碼會被認(rèn)為是expected
                                  非必須設(shè)置
;stopwaitsecs=10               ; 這個是當(dāng)我們向子進程發(fā)送stopsignal信號后盒粮,到系統(tǒng)返回信息
                                 給supervisord,所等待的最大時間奠滑。 超過這個時間丹皱,supervisord會向該
                                 子進程發(fā)送一個強制kill的信號。
                                 默認(rèn)為10秒宋税。摊崭。非必須設(shè)置
;stopasgroup=false             ; 這個東西主要用于,supervisord管理的子進程杰赛,這個子進程本身還有
                                 子進程呢簸。那么我們?nèi)绻麅H僅干掉supervisord的子進程的話,子進程的子進程
                                 有可能會變成孤兒進程。所以咱們可以設(shè)置可個選項根时,把整個該子進程的
                                 整個進程組都干掉瘦赫。 設(shè)置為true的話,一般killasgroup也會被設(shè)置為true蛤迎。
                                 需要注意的是确虱,該選項發(fā)送的是stop信號
                                 默認(rèn)為false。替裆。非必須設(shè)置蝉娜。。
;killasgroup=false             ; 這個和上面的stopasgroup類似扎唾,不過發(fā)送的是kill信號
;user=chrism                   ; 如果supervisord是root啟動召川,我們在這里設(shè)置這個非root用戶,可以用來
                                 管理該program
                                 默認(rèn)不設(shè)置胸遇。荧呐。。非必須設(shè)置項
;redirect_stderr=true          ; 如果為true纸镊,則stderr的日志會被寫入stdout日志文件中
                                 默認(rèn)為false倍阐,非必須設(shè)置
;stdout_logfile=/a/path        ; 子進程的stdout的日志路徑,可以指定路徑逗威,AUTO峰搪,none等三個選項。
                                 設(shè)置為none的話凯旭,將沒有日志產(chǎn)生概耻。設(shè)置為AUTO的話,將隨機找一個地方
                                 生成日志文件罐呼,而且當(dāng)supervisord重新啟動的時候鞠柄,以前的日志文件會被
                                 清空。當(dāng) redirect_stderr=true的時候嫉柴,sterr也會寫進這個日志文件
;stdout_logfile_maxbytes=1MB   ; 日志文件最大大小厌杜,和[supervisord]中定義的一樣。默認(rèn)為50
;stdout_logfile_backups=10     ; 和[supervisord]定義的一樣计螺。默認(rèn)10
;stdout_capture_maxbytes=1MB   ; 這個東西是設(shè)定capture管道的大小夯尽,當(dāng)值不為0的時候,子進程可以從stdout
                                 發(fā)送信息登馒,而supervisor可以根據(jù)信息匙握,發(fā)送相應(yīng)的event。
                                 默認(rèn)為0谊娇,為0的時候表達(dá)關(guān)閉管道肺孤。。济欢。非必須項
;stdout_events_enabled=false   ; 當(dāng)設(shè)置為ture的時候赠堵,當(dāng)子進程由stdout向文件描述符中寫日志的時候,將
                                 觸發(fā)supervisord發(fā)送PROCESS_LOG_STDOUT類型的event
                                 默認(rèn)為false法褥。茫叭。。非必須設(shè)置
;stderr_logfile=/a/path        ; 這個東西是設(shè)置stderr寫的日志路徑半等,當(dāng)redirect_stderr=true揍愁。這個就不用
                                 設(shè)置了,設(shè)置了也是白搭杀饵。因為它會被寫入stdout_logfile的同一個文件中
                                 默認(rèn)為AUTO莽囤,也就是隨便找個地存,supervisord重啟被清空切距。朽缎。非必須設(shè)置
;stderr_logfile_maxbytes=1MB   ; 這個出現(xiàn)好幾次了,就不重復(fù)了
;stderr_logfile_backups=10     ; 這個也是
;stderr_capture_maxbytes=1MB   ; 這個一樣谜悟,和stdout_capture一樣话肖。 默認(rèn)為0,關(guān)閉狀態(tài)
;stderr_events_enabled=false   ; 這個也是一樣葡幸,默認(rèn)為false
;environment=A="1",B="2"       ; 這個是該子進程的環(huán)境變量最筒,和別的子進程是不共享的
;serverurl=AUTO                ;
  
; 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] ;這個東西其實和program的地位是一樣的,也是suopervisor啟動的子進
                                       程蔚叨,不過它干的活是訂閱supervisord發(fā)送的event床蜘。他的名字就叫
                                       listener了。我們可以在listener里面做一系列處理蔑水,比如報警等等
                                       樓主這兩天干的活悄泥,就是弄的這玩意
;command=/bin/eventlistener    ; 這個和上面的program一樣,表示listener的可執(zhí)行文件的路徑
;process_name=%(program_name)s ; 這個也一樣肤粱,進程名弹囚,當(dāng)下面的numprocs為多個的時候,才需要领曼。否則默認(rèn)就
                                 OK了
;numprocs=1                    ; 相同的listener啟動的個數(shù)
;events=EVENT                  ; event事件的類型鸥鹉,也就是說,只有寫在這個地方的事件類型庶骄。才會被發(fā)送
                        
                                   
;buffer_size=10                ; 這個是event隊列緩存大小毁渗,單位不太清楚,樓主猜測應(yīng)該是個吧单刁。當(dāng)buffer
                                 超過10的時候灸异,最舊的event將會被清除,并把新的event放進去。
                                 默認(rèn)值為10肺樟。檐春。非必須選項
;directory=/tmp                ; 進程執(zhí)行前,會切換到這個目錄下執(zhí)行
                                 默認(rèn)為不切換么伯。疟暖。。非必須
;umask=022                     ; 淹沒田柔,默認(rèn)為none俐巴,不說了
;priority=-1                   ; 啟動優(yōu)先級,默認(rèn)-1硬爆,也不扯了
;autostart=true                ; 是否隨supervisord啟動一起啟動欣舵,默認(rèn)true
;autorestart=unexpected        ; 是否自動重啟,和program一個樣缀磕,分true,false,unexpected等邻遏,注意
                                  unexpected和exitcodes的關(guān)系
;startsecs=1                   ; 也是一樣,進程啟動后跑了幾秒鐘虐骑,才被認(rèn)定為成功啟動准验,默認(rèn)1
;startretries=3                ; 失敗最大嘗試次數(shù),默認(rèn)3
;exitcodes=0,2                 ; 期望或者說預(yù)料中的進程退出碼廷没,
;stopsignal=QUIT               ; 干掉進程的信號糊饱,默認(rèn)為TERM,比如設(shè)置為QUIT颠黎,那么如果QUIT來干這個進程
                                 那么會被認(rèn)為是正常維護另锋,退出碼也被認(rèn)為是expected中的
;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                   ;設(shè)置普通用戶,可以用來管理該listener進程狭归。
                                默認(rèn)為空夭坪。。非必須設(shè)置
;redirect_stderr=true          ; 為true的話过椎,stderr的log會并入stdout的log里面
                                默認(rèn)為false室梅。。疚宇。非必須設(shè)置
;stdout_logfile=/a/path        ; 這個不說了亡鼠,好幾遍了
;stdout_logfile_maxbytes=1MB   ; 這個也是
;stdout_logfile_backups=10     ; 這個也是
;stdout_events_enabled=false   ; 這個其實是錯的,listener是不能發(fā)送event
;stderr_logfile=/a/path        ; 這個也是
;stderr_logfile_maxbytes=1MB   ; 這個也是
;stderr_logfile_backups        ; 這個不說了
;stderr_events_enabled=false   ; 這個也是錯的敷待,listener不能發(fā)送event
;environment=A="1",B="2"       ; 這個是該子進程的環(huán)境變量
                                 默認(rèn)為空间涵。。榜揖。非必須設(shè)置
;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分組勾哩,劃分到組里面的program抗蠢。我們就不用一個一個去操作了
                         我們可以對組名進行統(tǒng)一的操作。 注意:program被劃分到組里面之后思劳,就相當(dāng)于原來
                         的配置從supervisor的配置文件里消失了迅矛。。敢艰。supervisor只會對組進行管理,而不再
                         會對組里面的單個program進行管理了
;programs=progname1,progname2  ; 組成員册赛,用逗號分開
                                 這個是個必須的設(shè)置項
;priority=999                  ; 優(yōu)先級钠导,相對于組和組之間說的
                                 默認(rèn)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]                         ;這個東西挺有用的牡属,當(dāng)我們要管理的進程很多的時候,寫在一個文件里面
                                    就有點大了扼睬。我們可以把配置信息寫到多個文件中逮栅,然后include過來
;files = relative/directory/*.ini

supervisor示例

示例:基于supervisor管理elasticsearch

# cat /etc/supervisord.d/service.ini 
[program:elasticsearch]
command=/application/elasticsearch/bin/elasticsearch
;程序啟動命令
user=elastic
; 用哪個用戶啟動進程,默認(rèn)是root
loglevel=info  
;日志的級別
redirect_stderr=true 
; 把stderr重定向到stdout窗宇,默認(rèn)false
stdout_logfile_maxbytes=50MB  
; stdout 日志文件大小措伐,默認(rèn)50MB
stdout_logfile_backups = 10   
; stdout 日志文件備份數(shù),默認(rèn)是10
;stdout 日志文件军俊,需要注意當(dāng)指定目錄不存在時無法正常啟動侥加,所以需要手動創(chuàng)建目錄(supervisord 會自動創(chuàng)建日志文件)
stdout_logfile=/var/log/supervisord/service.log
stderr_logfile=/var/log/supervisord/service.log
startsecs=10      
; 啟動10秒后沒有異常退出,就表示進程正常啟動了粪躬,默認(rèn)為1秒
startretries=60
; 啟動失敗自動重試次數(shù)担败,默認(rèn)是3
redirect_stderr=true 
stopasgroup=false     
;默認(rèn)為false,進程被殺死時,是否向這個進程組發(fā)送stop信號镰官,包括子進程
killasgroup=false     
;默認(rèn)為false提前,向進程組發(fā)送kill信號,包括子進程

# 加載配置
$ supervisorctl reread  
$ supervisorctl update
# 啟動elasticsearch
$ supervisorctl start elasticsearch
# 查看啟動狀態(tài)
$ supervisorctl status elasticsearch

常見的命令如下:

  • supervisord 初始啟動Supervisord泳唠,啟動狈网、管理配置中設(shè)置的進程
  • supervisorctl stop programxxx 停止某一個進程(programxxx),programxxx為
  • [program:chatdemon]里配置的值笨腥,這個示例就是chatdemon
  • supervisorctl start programxxx 啟動某個進程
  • supervisorctl restart programxxx 重啟某個進程
  • supervisorctl stop groupworker 重啟所有屬于名為groupworker這個分組的進程(start,restart同理)
  • supervisorctl stop all 停止全部進程孙援,注:start、restart扇雕、stop都不會載入最新的配置文件
  • supervisorctl reload 載入最新的配置文件拓售,停止原有進程并按新的配置啟動、管理所有進程
  • supervisorctl update 根據(jù)最新的配置文件镶奉,啟動新配置或有改動的進程梯嗽,配置沒有改動的進程不會受影響而重啟端考。注意:顯示用stop停止掉的進程边篮,用reload或者update都不會自動重啟 supervisorctl tail
  • programname //查看programname的日志
  • supervisorctl tail redis //查看日志

supervisor監(jiān)控管理

為了更方便的遠(yuǎn)程管理 Supervisor ,可以開啟其自帶的 web 控制臺币砂。

# 修改配置文件去掉注釋啟用
$ vim at /etc/supervisord.conf
[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服務(wù)
$ systemctl restart supervisord

通過瀏覽器直接訪問即可

file

點擊 "閱讀原文" 獲取更好的閱讀體驗!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玻侥,一起剝皮案震驚了整個濱河市决摧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凑兰,老刑警劉巖掌桩,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姑食,居然都是意外死亡波岛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門音半,熙熙樓的掌柜王于貴愁眉苦臉地迎上來则拷,“玉大人,你說我怎么就攤上這事曹鸠』筒纾” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵彻桃,是天一觀的道長宣旱。 經(jīng)常有香客問我,道長叛薯,這世上最難降的妖魔是什么浑吟? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮耗溜,結(jié)果婚禮上组力,老公的妹妹穿的比我還像新娘。我一直安慰自己抖拴,他們只是感情好燎字,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阿宅,像睡著了一般候衍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洒放,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天蛉鹿,我揣著相機與錄音,去河邊找鬼往湿。 笑死妖异,一個胖子當(dāng)著我的面吹牛惋戏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播他膳,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼响逢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了棕孙?” 一聲冷哼從身側(cè)響起舔亭,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蟀俊,沒想到半個月后钦铺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡欧漱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年职抡,在試婚紗的時候發(fā)現(xiàn)自己被綠了葬燎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片误甚。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谱净,靈堂內(nèi)的尸體忽然破棺而出窑邦,到底是詐尸還是另有隱情,我是刑警寧澤壕探,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布冈钦,位于F島的核電站,受9級特大地震影響李请,放射性物質(zhì)發(fā)生泄漏瞧筛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一导盅、第九天 我趴在偏房一處隱蔽的房頂上張望较幌。 院中可真熱鬧,春花似錦白翻、人聲如沸乍炉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岛琼。三九已至,卻和暖如春巢株,著一層夾襖步出監(jiān)牢的瞬間槐瑞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工阁苞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留随珠,地道東北人灭袁。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像窗看,于是被迫代替她去往敵國和親茸歧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容