使用supervisor管理Linux的应用服务
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文件进行启动,而不是默认的端口。
原创文章,转载注明出处 (http://sayhiai.com)程序配置实例
上面的配置文件只是为了控制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之类的语句
原创文章,转载注明出处 (http://sayhiai.com)管理
直接运行supervisorctl即可
[root@s17 conf.d]# supervisorctl agent RUNNING pid 1656, uptime 7 days, 1:28:47 collect RUNNING pid 2663, uptime 7 days, 0:35:11 doc RUNNING pid 1657, uptime 7 days, 1:28:47 query RUNNING pid 2595, uptime 7 days, 1:24:32
可以看到提供了丰富的指令
supervisor> help default 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>
注意:supervisor的启动要和应用程序使用相同的用户和权限(程序自己控制的除外),否则会产生死锁问题。遇到这种情况,需要手动kill进程,修正权限后使用。
相关推荐
farwang 2020-11-25
星愿心愿 2020-11-24
tianhuak 2020-11-24
zhjn0 2020-11-24
昭君出塞 2020-11-23
bluecarrot 2020-11-23
linuxwcj 2020-10-21
以梦为马不负韶华 2020-10-20
彼岸随笔 2020-10-20
yutou0 2020-10-17
applecarelte 2020-10-16
ourtimes 2020-10-16
waterhorse 2020-09-19
MRFENGG 2020-11-11
rainandtear 2020-10-30
kyssfanhui 2020-10-20
liuhangtiant 2020-10-20