使用supervisor管理Linux的應用服務

  • 2019 年 10 月 7 日
  • 筆記

supervisor 是一個Python程式,採用守護進程的方式,對單台機器上的程式進行啟停管理、自動重啟等。如果你想保證的的程式異常推出後能夠自動啟動,supervisor就是你的一個選擇

安裝

pip install supervisor

安裝後會產生兩個可執行程式

  • supervisortd:守護進程服務
  • supervisorctl:客戶端,用於命令行交互

啟動

建議通過指定配置文件的方式進行啟動

supervisord -c /etc/supervisord/supervisord.conf

主配置文件

[unix_http_server]  file=/var/run/supervisor.sock   ; (the path to the socket file)  chmod=0700                       ; sockef file mode (default 0700)[supervisord]  logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)  pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)  childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)  environment=SPAN_STORAGE_TYPE="elasticsearch"[supervisorctl]  serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket[include]  files = /etc/supervisord/conf.d/*.conf[inet_http_server]  port = 127.0.0.1:9001[rpcinterface:supervisor]  supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

我們會將啟動管理的程式放在/etc/supervisord/conf.d/*.conf目錄下(可自定義)

environment 可以追加一些啟動環境的環境變數

注意下面的inet_http_server一定要加上,否則,你的客戶端控制程式就需要鏈接socket文件進行啟動,而不是默認的埠。


程式配置實例

上面的配置文件只是為了控制supervioed的行為,為了管理我們的程式,還需要創建一批配置文件。每一個配置文件,對應一個外部程式的管理。

例子:

[root@s17 conf.d]# cat agent.conf  [program:agent]  command     = /root/jaeger-1.5.0-linux-amd64/jaeger-agent  --collector.host-port=192.168.3.237:14267 --discovery.min-peers=1 --log-level=debug  directory   = /root/jaeger-1.5.0-linux-amd64  user        = root  startsecs   = 3redirect_stderr         = true  stdout_logfile_maxbytes = 50MB  stdout_logfile_backups  = 10  stdout_logfile          = agent.log

注意日誌終端是直接阻塞在supervisor上的,所以不需要使用nohup之類的語句


管理

直接運行supervisorctl即可

[root@s17 conf.d]# supervisorctlagent                            RUNNING   pid 1656, uptime 7 days, 1:28:47collect                          RUNNING   pid 2663, uptime 7 days, 0:35:11doc                              RUNNING   pid 1657, uptime 7 days, 1:28:47query                            RUNNING   pid 2595, uptime 7 days, 1:24:32

可以看到提供了豐富的指令

supervisor> helpdefault commands (type help <topic>):  =====================================  add    exit      open  reload  restart   start   tail  avail  fg        pid   remove  shutdown  status  update  clear  maintail  quit  reread  signal    stop    versionsupervisor>

注意:supervisor的啟動要和應用程式使用相同的用戶和許可權(程式自己控制的除外),否則會產生死鎖問題。遇到這種情況,需要手動kill進程,修正許可權後使用。

Tags: