1. <em id="vzzs9"></em>
      <tbody id="vzzs9"></tbody>

    2. <span id="vzzs9"></span>
      <progress id="vzzs9"></progress>
      首頁 運維干貨linux應用服務管理工具(supervisor)

      linux應用服務管理工具(supervisor)

      運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
      領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

      注:

      - 此工具屬于“工具-自動化-應急類”

      –?官網:http://www.supervisord.org/

      1、supervisor工具

      Linux的后臺進程運行有好幾種方法,例如nohup,screen等,但是,如果是一個服務程序,要可靠地在后臺運行,我們就需要把它做成daemon,最好還能監控進程狀態,在意外結束時能自動重啟。supervisor就是用Python開發的一套通用的進程管理程序,能將一個普通的命令行進程變為后臺daemon,并監控進程狀態,異常退出時能自動重啟。

      Supervisor 有兩個主要的組成部分:

      – supervisord,運行 Supervisor 時會啟動一個進程 supervisord,它負責啟動所管理的進程,并將所管理的進程作為自己的子進程來啟動,而且可以在所管理的進程出現崩潰時自動重啟。

      – supervisorctl,是命令行管理工具,可以用來執行 stop、start、restart 等命令,來對這些子進程進行管理。

      supervisor是所有進程的父進程,管理著啟動的子進展,supervisor以子進程的PID來管理子進程,當子進程異常退出時supervisor可以收到相應的信號量。

      ?1)安裝supervisor?

      安裝supervisor

      rpm -ivh supervisor-3.0-1.gf.el6.noarch.rpm

      #實測過程中,還要安裝依賴包:

      rpm -ivh python-meld3-0.6.7-1.el6.x86_64.rpm

      服務命令:

      service supervisord stop
      service supervisord start

      2)配置文件介紹?

      創建配置文件

      echo_supervisord_conf > /etc/supervisord.conf

      默認下的supervisord.conf配置文件將supervisord.pid 以及 supervisor.sock 放在 /tmp 目錄,可能會被 Linux 系統刪除的,需要作修改。

      [unix_http_server]
      ;file=/tmp/supervisor.sock?? ; (the path to the socket file)
      ;修改為 /var/run 目錄,避免被系統刪除
      file=/var/run/supervisor.sock
      ;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=127.0.0.1:9001??????? ; (ip_address:port specifier, *:port for ;all iface)
      ;在后面遠程可視化管理中會用到

      username=calypso? ? ? ? ? ? ? ; (default is no username (open server))
      password=123456? ? ? ? ? ? ? ?; (default is no password (open server))

      [supervisord]
      ;logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
      ;修改為 /var/log 目錄,避免被系統刪除
      logfile=/var/log/supervisor/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)
      ;修改為 /var/run 目錄,避免被系統刪除
      pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)

      [supervisorctl]
      ;修改為 /var/run 目錄,避免被系統刪除
      serverurl=unix:///var/run/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

      [include]
      files = /etc/supervisord.d/*.ini? ;對應需要管理的進程配置文件

      ;[eventlistener:theeventlistenername]

      ;是suopervisor啟動的子進程,是訂閱supervisord發送的event,比如報警等,后續將寫一篇發送事件報警的實踐文章

      ;command=/bin/eventlistener? ? ;listener的可執行文件的路徑

      ;process_name=%(program_name)s? ? ;進程名,當下面的numprocs為多個的時候,才需要。

      ;numprocs=1? ? ? ? ? ? ; 相同的listener啟動的個數

      ;events=EVENT? ? ? ? ? ?; event事件的類型,指定類型才會被發送

      ;buffer_size=10? ? ? ? ? ; 這個是event隊列緩存大小

      ;directory=/tmp? ? ? ? ? ; 進程執行前,會切換到這個目錄下執行默認為不切換。。。非必須

      ;umask=022? ? ? ? ? ? ?; 默認為none

      ;priority=-1? ? ? ? ? ? ; 啟動優先級,默認-1

      ;autostart=true? ? ? ? ? ; 是否隨supervisord啟動一起啟動,默認true

      ;autorestart=unexpected? ? ? ; 是否自動重啟,分true,false,unexpected等

      ;startsecs=1? ? ? ? ? ? ; 也是一樣,進程啟動后跑了幾秒鐘,才被認定為成功啟動,默認1

      ;startretries=3? ? ? ? ? ; 失敗最大嘗試次數,默認3

      ;exitcodes=0,2? ? ? ? ? ?; 期望或者說預料中的進程退出碼,

      ;stopsignal=QUIT? ? ? ? ? ; 干掉進程的信號,默認為TERM,比如設置為QUIT,那么如果QUIT來干這個進程那么會被認為是正常維護,退出碼也被認為是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? ? ? ? ? ? ;設置普通用戶,可以用來管理該listener進程。默認為空

      ;redirect_stderr=true? ? ? ? ; 為true的話,stderr的log會并入stdout的log里面默認為false

      ……

      ;[group:thegroupname]? ? ? ? ? ? ;programs分組

      ;programs=progname1,progname2? ? ; 組成員,用逗號分開這個是個必須的設置項

      ;priority=999? ? ? ? ? ?; 優先級,相對于組和組之間說的默認999

      進程配置文件

      ; 設置進程的名稱,使用 supervisorctl 來管理進程時需要使用該進程名

      [program:calypso_api]
      command=/calypso/envs/GFSCalypsoAdapters/API/scripts/gfs_calypso_api_service.sh start
      directory=/calypso/envs/GFSCalypsoAdapters/API/scripts/ ; 執行 command 之前,先切換到目錄
      numprocs=1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?; 默認為1

      process_name=%(program_name)s? ? ? ? ? ; 默認為 %(program_name)s,即 [program:x] 中的 x
      user=calypso? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?; 使用?calypso 用戶來啟動該進程
      #autostart=true
      autorestart=true??? ; 程序崩潰時自動重啟,重啟次數是有限制的,默認為3次,設置子進程掛掉后自動重啟的情況,有三個選項,false,unexpected和true。如果為false的時候,無論什么情況下,都不會被重新啟動,如果為unexpected,只有當進程的退出碼不在下面的exitcodes里面定義的
      environment=PATH=”/usr/java/jdk1.7.0_21/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/dell/srvadmin/bin:/opt/mqm/samp/bin”??????????????; 設置環境變量
      redirect_stderr=true
      stdout_logfile=/var/log/calypso_api_stdout.log
      stdout_logfile_maxbytes=1MB
      stdout_logfile_backups=10
      stdout_capture_maxbytes=1MB
      stdout_events_enabled=false
      stderr_logfile=/var/log/calypso_api_stderr.log
      stderr_logfile_maxbytes=1MB
      stderr_logfile_backups=10
      stderr_capture_maxbytes=1MB
      stderr_events_enabled=false

      3)supervisorctl 命令介紹?

      # 停止某一個進程,program_name 為 [program:x] 里的 x
      supervisorctl stop program_name
      # 啟動某個進程
      supervisorctl start program_name
      # 重啟某個進程
      supervisorctl restart program_name
      # 結束所有屬于名為 groupworker 這個分組的進程 (start,restart 同理)
      supervisorctl stop groupworker:
      # 結束 groupworker:name1 這個進程 (start,restart 同理)
      supervisorctl stop groupworker:name1
      # 停止全部進程,注:start、restart、stop 都不會載入最新的配置文件
      supervisorctl stop all
      # 載入最新的配置文件,停止原有進程并按新的配置啟動、管理所有進程
      supervisorctl reload
      # 根據最新的配置文件,啟動新配置或有改動的進程,配置沒有改動的進程不會受影響而重啟
      supervisorctl update

      ?4)注意事項 (坑)

      – supervisor 比較適合監控業務應用,且只能監控前臺程序,如果你的程序是以daemon的方式啟動,那么執行:supervisor status 會提示:BACKOFF? Exited too quickly (process log may have details)。

      注意設置環境變量:environment=A=”1″,B=”2″?????? ; process environment additions (def no adds)

      2、事件插件

      1)插件:https://github.com/ouqiang/supervisor-event-listener

      supervisor-event-listener,Supervisor事件通知, 支持郵件, Slack, WebHook

      2)網上有一個事件例子(附例子)http://www.cnblogs.com/felixzh/p/6100000.html

      過陣子專門寫一篇這塊的整理

      3、可視化工具

      默認的工具只能管理一個進程,如果在公司統一使用,需要找一個可以統一管理所有進程的工具,官網推薦了幾個可視化工具:
      -CESI

      以Python編寫的基于Web的儀表板。

      –?Django的Dashvisor

      以Python編寫的基于Web的儀表板。需要Django 1.3或1.4。

      –?Nodervisor

      在Node.js中編寫的基于Web的儀表板

      –?Supervisord監視器

      基于Web的儀表板用PHP編寫。

      –?SupervisorUI

      另一個使用PHP編寫的基于Web的儀表板。

      –?supervisorclusterctl

      使用Ansible控制多個Supervisor實例的命令行工具。

      –?suponoff

      以Python 3編寫的基于Web的儀表板。需要Django 1.7或更高版本。

      –?Supvisors

      專為分布式應用程序而設計,以Python 2.7編寫。包括擴展的XML-RPC API和基于Web的儀表板。

      實測試用,其中CESI不錯,推薦使用。程序來源:https://github.com/Gamegos/cesi

      Centralized Supervisor Interface: Cesi

      可視化工具原文來自微信公眾號:運維之路

      本文鏈接:http://www.abandonstatusquo.com/22912.html

      網友評論comments

      發表評論

      您的電子郵箱地址不會被公開。

      暫無評論

      Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
      掃二維碼
      掃二維碼
      返回頂部
      久久久久亚洲国内精品|亚洲一区二区在线观看综合无码|欧洲一区无码精品色|97伊人久久超碰|一级a爱片国产亚洲精品