使用supervisor管理Linux的应用服务

470 阅读1分钟

  


  安装

  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 = 3

  redirect_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 version

  supervisor