最近需要在 Ubuntu 上配置一下进程守护,因为有些进程必须一直运行,否则就比较尴尬。于是网上搜索了一下,比较原生的做法是使用 systemd 进行配置,但是看了下操作比较繁琐,于是搜到了 Supervisor。Supervisor(http://supervisord.org)是用 Python 开发的一个 client / server 服务,是 Linux / Unix 系统下的一个进程管理工具,不支持 Windows 系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用 Supervisor 管理的进程,当一个进程意外被杀死,Supervisord 监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写 shell 脚本来控制。
本文介绍 Supervisor 的安装、配置、使用技巧,并设置 Supervisor 开机自动启动。
一、Ubuntu 安装 Supervisor
官方推荐使用 pip 或者 Python 进行安装 Supervisor,但是对于 Ubuntu 用户来说,老唐认为直接使用 apt 安装更为方便。不过使用 apt 安装的版本会比使用 pip 安装的版本低,但是我认为一样用。
老唐用的是 apt 直接安装(下文都以这个安装方式为例进行介绍):
apt install supervisor
或者你也可以使用 pip 安装:
pip install supervisor
官方安装教程:http://supervisord.org/installing.html
二、Ubuntu 配置 Supervisor
安装完成之后,会有配置文件,在 /etc/supervisor/supervisord.conf
,我们不用管,我们所需要做的,就是在 /etc/supervisor/conf.d/
这个目录下创建自己需要守护的程序的配置文件。比如我需要守护 frp 进程,我需要创建一个配置文件(建议直接使用 root 账户操作):
sudo vim /etc/supervisor/conf.d/frp.conf
配置文件内容如下:
[program:frp] directory=/home/edge/frp_0.30.0_linux_amd64 command=sh frp.sh autostart=true autorestart=true startretries=100 redirect_stderr=true stdout_logfile=/home/edge/frp_0.30.0_linux_amd64/out.log
相信大家都能看懂,把 program 改一下,然后把 directory 和 command 改成自己的,stdou_logfile 也改成自己的,就可以了。
官方给出的详细的参数设置文档:http://supervisord.org/configuration.html
三、检查 Supervisor 状态
配置之后,我们可以检查一下 Supervisor 状态。首先确认是否运行:
ps aux | grep supervisor
一般都能看到对应进程。
其次检查守护的进程的状态:
supervisorctl
我们就可以看到我们配置的守护进程的状态,如果不在运行,会有相应的错误信息。
supervisorctl
常用命令:
命令 | 说明 |
---|---|
supervisorctl stop program_name | 停止某个进程 |
supervisorctl start program_name | 启动某个进程 |
supervisorctl restart program_name | 重启某个进程 |
supervisorctl stop all | 停止全部进程 |
supervisorctl reload | 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程 |
supervisorctl update | 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启 |
四、设置 Supervisor 开机自动启动
如果我们是使用 apt 安装的,一般来说会自动设置好开机启动,这也是为什么文章开头推荐使用 apt 进行安装的理由。但是如果你重启之后发现没有开机自动启动,可以按照下面的方法配置。
把下面的命令写进 rc.local 即可:
/usr/bin/supervisord
Ubuntu 配置 rc.local 参考:《Ubuntu 18.04 LTS 配置 rc.local 开机自动启动脚本》。
更多参考文献: