前言
使用内网穿透时 可能会出现各种不稳定因素导致服务中断, 一旦中断 那么外网就无法对内网进行访问了
为了保证连接的持久稳定性, 我们需要对进程进行监控, 一旦发现服务掉线或者出错 就自动重启程序
为了实现这个需求, 我们可以用supervisor
, 它是由python
写的一个进程管理工具, 主要功能有:
- 启动、重启、关闭进程
- 服务挂掉后,自动重启
- 可执行文件或者配置文件修改后,服务自动重启
- 内置可视化界面管理
上一章给大家介绍了《使用frp进行内网穿透实现外网访问局域网中的服务器》
由于服务端使用的是第三方的中转服务器, 服务器的稳定性暂不考虑, 目前只需关心客户端这一块, 这里 我以内网中Mac
机器为例给大家介绍supervisor
的使用
开始实现
安装
supervisor
1
brew install supervisor
或者
1
sudo pip3 install supervisor
检查是否安装成功
1
brew info supervisor
或者
1
brew info supervisor
显示版本号则说明安装成功
创建配置文件
在
/usr/local/etc/
目录下创建一个配置文件名为supervisord.conf
1
touch supervisord.conf
配置服务
在配置文件中添加以下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27[inet_http_server] ;开启http服务
port=127.0.0.1:9001 ;指定端口号为9001
username=user ; 用户名
password=123 ; 密码
[supervisord]
logfile=/tmp/supervisord.log ; 日志文件
logfile_maxbytes=50MB ; 日志文件最大50Mb
logfile_backups=10 ; 日志备份数量
loglevel=info ; 打印日志的等级 默认为info 除此之外还有 debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid文件路径
nodaemon=false ; 是否在前台运行
silent=false ;是否关闭日志打印
minfds=1024
minprocs=200
[supervisorctl]
serverurl=http://127.0.0.1:9001 ;访问这个服务进行进程管理
username=user ; 需要和http用户名保持一致
password=123 ; 需要和http密码保持一致 用于管理工具的连接 如果不配置的话 每次使用supervisorctl都得手动输入用户名密码
[rpcinterface:supervisor] ;这个配置必须要有
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface配置详解:
- [inet_http_server]: 开启
http
服务 提供可视化监控界面 - [supervisord]:
supervisor
服务配置 缺少它supervisor
无法启动 - [supervisorctl]:
supervisor
管理工具
- [inet_http_server]: 开启
启动
supervisor
1
supervisord -c /usr/local/etc/supervisord.conf
启动后 我们在浏览器中输入
http://127.0.0.1:9001
, 填入配置文件中的username
和password
, 进入到守护进程管理页面我们在页面中为发现进程信息, 因为还没有配置需要进行守护的进程
添加需要进行监测并守护的进程
在配置文件中追加以下内容:
1
2
3
4
5
6
7
8
9
10[program:frpc] ;名称为frpc 这个可以自定义 但是不能重复
command=/Users/songjian/frp/frpc/frpc -c ./frpc.ini ; 需要运行的程序指令
directory=/Users/songjian/frp/frpc ;程序目录
autostart=true ; supervisor 启动时跟随启动
autorestart=true ; 程序崩溃时自动重启
startsecs=5 ; # of secs prog must stay up to be running (def. 1)
startretries=3 ;重试次数
stdout_logfile=/Users/songjian/frp/frpc/supervisord.log ; 日志文件路径
stdout_logfile_maxbytes=20MB ; 日志文件最大容量
stdout_logfile_backups=10 ; # 日志备份数量重载配置文件
1
supervisorctl
执行后提示需要验证 输入用户名和密码后进入子命令窗口, 然后输入
reload
进行重载:此时我们刷新浏览器可以看到守护的程序已经启动:
我们可以直接在浏览其中直接对其进行重启 停止 以及日志查看等操作
至此 我们
supervisor
对frpc
的守护已初步实现
supervisor开机自启
我们希望内网机器开机后自动启动supervisor
, 在Mac平台实现很简单, 只需执行以下指令即可:
1 | brew services start supervisor |
brew services
内部使用的是launchctl
, 简化了launchctl
的繁琐操作, brew services
的常用命令有:
1 | brew services list # 查看使用brew安装的服务列表 |
supervisorctl管理工具提供的功能
我们可以利用supervisorctl
对我们的守护进行进行启动 停止 重启等操作, 具体的可以输入help
进行查看:
停止
supervisor
1
shutdown
该指令不仅会停止
supervisor
, 还会停止其守护的所有程序停止某个守护进程
1
stop 进程名
停止所有守护进程
1
stop all
重启某个守护进程
1
restart 进程名
重载整个配置文件
1
reload
所有子进程会重启
更新配置文件
1
update
配置文件中有改动的进程会被重启 没有改动的不受影响
本文为作者原创转载时请注明出处 谢谢