linux 应用服务管理,使用supervisor管理Linux的应用服务

本文介绍了如何使用Python程序Supervisor来实现服务的自动启停和故障恢复,确保程序异常退出后能自动启动。通过配置文件`supervisord.conf`设置守护进程和客户端交互,并在`/etc/supervisord/conf.d/`目录下管理各程序配置。强调了`inet_http_server`配置项的重要性,以及启动和管理程序的命令行操作。同时提醒注意Supervisor与程序用户的权限匹配,避免死锁问题。
AI助手已提取文章相关产品:

小姐姐味道【ID:xjjdog】

作者:十年架构,日百亿流量经验,与你分享流年不利流年不利啊。

AAffA0nNPuCLAAAAAElFTkSuQmCCsupervisor 是一个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   = 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 ):

=====================================

add    exit      open  reload  restart   start   tail

avail  fg        pid   remove  shutdown  status  update

clear  maintail  quit  reread  signal    stop    version

supervisor>注意:supervisor的启动要和应用程序使用相同的用户和权限(程序自己控制的除外),否则会产生死锁问题。遇到这种情况,需要手动kill进程,修正权限后使用。

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值