1 安装 Supervisor
Supervisor 本身是一个特殊的 Erlang 进程,它可以通过定义监督策略来保证子进程的运行。监控子进程并在它们崩溃时自动重启,确保系统的稳定性和可靠性。
1.1 安装 setuptools
版本:setuptools-44.1.1.zip
适配
Python2
的最后一个版本
下载地址:https://pypi.org/project/setuptools/#files
将setuptools-44.1.1.zip
上传至/opt/src
目录
## 解压
$ unzip -o -d /opt/ /opt/src/setuptools-44.1.1.zip
# -o: 不提示的情况下覆盖文件
# -d: 将文件解压缩到指定目录下
$ cd /opt/setuptools-44.1.1/
## 安装
$ python setup.py install
1.2 安装 Supervisor
版本:supervisor-4.2.5.tar.gz
下载地址:https://pypi.org/project/supervisor/#files
将supervisor-4.2.5.tar.gz
上传至/opt/src
目录
## 解压
$ tar -zxvf /opt/src/supervisor-4.2.5.tar.gz -C /opt/
$ cd /opt/supervisor-4.2.5/
## 安装
$ python setup.py install
## 验证安装是否成功
$ supervisord --version
1.3 配置 Supervisor
$ echo_supervisord_conf > /etc/supervisord.conf
##存放每个进程的配置文件
$ mkdir -p /opt/supervisor/conf.d
$ mkdir -p /var/supervisor
$ touch /var/supervisor/supervisord.pid
$ mkdir -p /var/log/supervisor
$ touch /var/log/supervisor/supervisord.log
$ vim /etc/supervisord.conf
配置参考
[unix_http_server]
file=/var/supervisor/supervisor.sock
[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/supervisor/supervisord.pid
[supervisorctl]
serverurl=unix:////var/supervisor/supervisor.sock
[include]
files = /opt/supervisor/conf.d/*.conf
1.4 Supervisor 常用命令
## 启动 Supervisor
$ supervisord -c /etc/supervisord.conf
## 关闭 Supervisor
$ supervisorctl shutdown
## 重新启动 Supervisor 进程本身。这会导致所有受管理的进程(程序)重新启动。
# 当你对 supervisord 的主配置文件(通常是 /etc/supervisord.conf)做了修改,或者需要重新启动 Supervisor 来应用一些全局性的更改时使用。
# 重新启动 Supervisor 会停止并重新启动所有被其管理的进程。
$ supervisorctl reload
## 重新读取所有配置文件,以检测新的程序或删除的程序。
# 当你添加、删除或修改了 supervisor 的配置文件(如 /opt/supervisor/conf.d/ 目录下的文件),但不希望立即应用这些更改到正在运行的进程时使用。
# 这个命令仅会让 Supervisor 识别配置文件中的变化,但不会启动或停止任何程序。被添加的或被删除的程序仅会在之后的 update 操作时被启动或停止。
$ supervisorctl reread
## 根据 reread 命令的结果来启动新增的进程或停止已经被删除的进程。也会重新启动已修改配置的程序。
# 当你想让配置文件中的更改生效时使用,尤其是在你已经使用 reread 命令来检测配置文件变化之后。
# 新增的进程将会被启动,已删除的进程将会被停止,已经修改的进程将被重新启动。
$ supervisorctl update
## 启动程序,all表示启动所有程序。
$ supervisorctl start {PROGRAM< ...>}|all
## 停止程序,all表示停止所有程序。
$ supervisorctl stop {PROGRAM< ...>}|all
## 查看程序状态,如为all或不指定则查看所有程序状态。
$ supervisorctl status {PROGRAM< ...>}|all
## 重启程序,all表示重启所有程序。
$ supervisorctl restart {PROGRAM< ...>}|all
1.5 Supervisor 加入系统服务
1.5.1 创建 Supervisor 的 systemd 服务文件
将 supervisord
添加为 systemd
服务,为 supervisord
创建一个新的 systemd
服务文件。
$ vim /etc/systemd/system/supervisord.service
文件中添加以下内容:
[Unit]
Description=Supervisor process control
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/bin/supervisord -n -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
1.5.2 重新加载 systemd
配置
重新加载 systemd
配置,使新创建的 supervisord
服务文件生效:
$ systemctl daemon-reload
1.5.3 设置 supervisord
开机自启动
在系统启动时自动启动:
$ systemctl enable supervisord
1.5.4 启动 Supervisor
服务
$ systemctl start supervisord
1.5.5 检查服务状态
$ systemctl status supervisord
如果状态显示为 active (running)
,说明 supervisord
服务已成功启动并配置为开机自启。
2 管理应用
2.1 管理 SpringBoot 应用
创建 Spring Boot 应用的 Supervisor 配置文件。
[program:myapp]
command=java -jar /opt/myapp/myapp.jar
directory=/opt/myapp
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
user=your_username
whereis java 查询java全路径
配置选项说明:
command
: 这是运行 Spring Boot 应用的命令。确保路径正确并且java
可执行文件在系统的PATH
中。directory
: 这是应用程序的工作目录。Supervisor 会在启动程序前切换到这个目录。autostart
: 设为true
,表示 Supervisor 在启动时会自动启动该应用。autorestart
: 设为true
,表示如果应用崩溃,Supervisor 会自动重启它。stderr_logfile
和stdout_logfile
: 指定错误日志和标准输出日志文件的路径,方便排查问题。user
: 指定用哪个用户来运行程序(推荐用非root
用户)。
2.2 管理 Nginx
mkdir -p /var/log/nginx
vim /opt/supervisor/conf.d/nginx.conf
文件中添加以下内容:
[program:nginx]
command=/usr/local/bin/nginx -g 'daemon off;'
autostart=true
autorestart=true
stderr_logfile=/var/log/nginx/nginx.err.log
stdout_logfile=/var/log/nginx/nginx.out.log
user=root
配置选项说明:
command
: 这是运行 Nginx 的命令。-g 'daemon off;'
参数告诉 Nginx 以前台模式运行,这样 Supervisor 可以管理它。autostart
: 设为true
,表示 Supervisor 在启动时会自动启动 Nginx。autorestart
: 设为true
,表示如果 Nginx 崩溃,Supervisor 会自动重启它。stderr_logfile
和stdout_logfile
: 指定错误日志和标准输出日志文件的路径,方便排查问题。user
: 通常运行 Nginx 需要root
权限,因为它需要监听 80 或 443 等低端口。如果你有特定的非root
用户用于运行 Nginx,你可以更改此选项。
重新加载 Supervisor 配置并启动 Nginx
$ supervisorctl reread
$ supervisorctl update
检查 Nginx 的状态
$ supervisorctl status nginx
2.3 管理 Redis
mkdir -p /var/log/redis
vim /opt/supervisor/conf.d/redis.conf
文件中添加以下内容:
[program:redis]
command=/opt/redis/bin/redis-server /opt/redis/bin/redis.conf
autostart=true
autorestart=true
stderr_logfile=/var/log/redis/redis.err.log
stdout_logfile=/var/log/redis/redis.out.log
user=root
配置选项说明:
command
: 这是运行 Redis 的命令,指定了 Redis 的可执行文件和配置文件的路径。默认的 Redis 配置文件通常位于/etc/redis.conf
。autostart
: 设为true
,表示 Supervisor 在启动时会自动启动 Redis。autorestart
: 设为true
,表示如果 Redis 崩溃,Supervisor 会自动重启它。stderr_logfile
和stdout_logfile
: 指定错误日志和标准输出日志文件的路径,方便排查问题。user
: 指定为redis
用户,确保 Redis 以合适的权限运行。
重新加载 Supervisor 配置并启动 Redis
$ supervisorctl reread
$ supervisorctl update
检查 Redis 的状态
$ supervisorctl status redis
为了让 Supervisor 正确管理 Redis,
daemonize
应该设置为no