supervisor快速上手使用教程

因为树莓派的远程监控已经布好了,我现在面临一个问题,就是frp有可能会因为意外的一些情况被杀掉。如果我正在使用的时候,客户端的被杀掉了。我就没发连上,只能等到下班之后。这个是很坑的一件事情。因为公司的项目已经在用supervisor这个工具,所以我决定用这个工具来帮我管理进程。supervisor是用python开发的。可以很好的管理进程。如果进程被杀掉了,或者意外情况断开了,supervisor会重新帮我们把进程打开。废话不多说,这里切入正题。

安装

服务器在阿里云上,centos的系统,先解决安装问题:

yum install python-setuptools
easy_install supervisor
或者使用
wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O - | sudo python
easy_install supervisor

同样也是两条命令。

使用

首先,使用root身份创建一个全局配置文件(supervisord.conf)

echo_supervisord_conf > /etc/supervisord.conf
supervisord -c /etc/supervisord.conf  #这一步已经完成supervisord的启动。

需要说明的是,这两行命令一旦敲定,你就不能再移动supervisord.conf这个文件了。
因为如果你再移动这个文件,启动必须得指定路径。同时,你也无法再直接使用supervisorctl这个命令了。
然后我们可以打开supervisord.conf来看一下:
基本上都不需要修改。里面有一个[unix_http_server],这个里面可以配置执行用户,执行组,用户名,密码。可以不动。
[supervisord]里面存放的是管理所有进程的日志输出的地方。举个例子。我的服务自己会产生一堆的日志,这个日志是我自己管理的。而[supervisord]是管理类似我这样很多服务在启动,更新时产生的日志。不是同一个日志。
这里关于文件带下,文件备份数量,日志级别等都可以根据实际情况做修改。当然,如果你要启用服务的话,你得把这行命令前面的分号给去掉,分号应该是注释的意思。
然后就可以拉到最后,有一个[include]的文件。这个路径就比较重要了。这个路径就是你后面配置的进程文件。这里我会默认改成supervisord.d/*.conf
这样的话,就可以在/etc/supervisord.d下,创建我们自己的进程配置。supervisord启动的时候,就会去启动我们自己的进程配置。

接着,我们得写自己的进程配置文件了

进程配置文件的路径,上面已经说了,我这里在/etc/supervisord.d下,切到这个目录下,创建一个frphome.conf, 这个进程是连到家里的树莓派的。

vim frphome.conf

然后编辑如下内容:

[program:frphome]
command=/home/guo/frp_0.21.0_linux_amd64/frps -c /home/guo/frp_0.21.0_linux_amd64/frps.ini
user=root
autostart=true
autorestart=true
startsecs=3
stdout_logfile=/home/guo/frp/rbhome.log

首先要说的是,supervisor不但可以管理python进程,还可以管理shell相关的进程。但是,我之前用了个cd 切到目录下,就出问题了。所以这里我把路径给写死了,就可以正常运行。
下面简单解释一下命令:
command就是要执行的命令。user就是用root权限来执行。autostart 是自动启动。 autorestart 就是如果挂了的话,会自动启动三次。 startsecs是子进程启动3秒后,如果状态为run,意为启动了。
stdout_logfile就是我当前这个进程运行的时候产生的日志输出了。

启动

到这里的时候,我们就可以进supervisor了,如果上面提到的supervisord.conf的位置,你没有修改它,你就可以直接supervisorctl启动了,否则的话,你得这样:

sudo supervisorctl -c /etc/supervisor/supervisord.conf

这里,/etc/supervisor/supervisord.conf就是你supervisord.conf的路径。这里根据实际情况进行修改。

执行完之后,就进入进程的一个管理命令行了。
可以通过执行
status查看一下运行状态。
start来启动一个进程。
restart来重启一个进程
stop来停止一个进程
stop还有两个用法,stop groupworkerstop all
stop groupworker,是停止所有属于名为groupworker这个分组的进程。
reload——我个人觉得这个一个很危险的命令,因为它会把你已经运行的进程进行重启。
如果你刚刚加了一个新配置进来,还有bug的话,就会导致所有的进程都挂掉!!!(之前的惨痛经历)
当然,如果用的话,最好还是用update.
update——这个配置没有修改的是不会重启的,如果你的代码修改了,可以单独restart 一个进程。如果是进程组的话,也最好是一个一个启动。防止都挂了。

看到这里已经算入门了,更多配置,请参考官方文档

参考:

https://feilong.me/2011/03/monitor-processes-with-supervisord
https://www.restran.net/2015/10/04/supervisord-tutorial/
https://blog.csdn.net/xyang81/article/details/51555473
https://www.jianshu.com/p/2008cf9f7ee7
https://stackoverflow.com/questions/18859063/supervisor-socket-error-issue
http://liyangliang.me/posts/2015/06/using-supervisor/

猜你喜欢

转载自blog.csdn.net/funnyPython/article/details/85116351