一台运行了好久的 RockyLinux 服务器做了一下重启,重启之后用 supervisorctl 启动服务的时候发现 supervisor 服务没有启动。
然后 systemctl 启动 supervisor 的时候有发现没有这个服务。
$ which supervisord supervisorctl
/usr/local/bin/supervisord
/usr/local/bin/supervisorctl
# 如果是 yum/apt 安装的,二进制程序路径应该是 /usr/bin/supervisord。
$ rpm -qf /usr/local/bin/supervisord
file /usr/local/bin/supervisord is not owned by any package
# Debian/Ubuntu 上对应的命令是 dpkg -S /usr/local/bin/supervisord
$ ls -l /etc/supervisor/supervisord.conf
-rw-r--r-- 1 root root 10648 Mar 12 18:59 /etc/supervisor/supervisord.conf
$ ls -l /etc/supervisord.conf
ls: cannot access '/etc/supervisord.conf': No such file or directory
$ locate -r "/supervisor$"
/etc/supervisor
/opt/woodycoder/deploy/supervisor
/usr/local/lib/python3.12/site-packages/supervisor
$ pip show supervisor
Name: supervisor
Version: 4.3.0
Summary: A system for controlling process state under UNIX
Home-page: http://supervisord.org/
Author: Chris McDonough
Author-email: chrism@plope.com
License: BSD-derived (http://www.repoze.org/LICENSE.txt)
Location: /usr/local/lib/python3.12/site-packages
Requires:
Required-by:
原来之前使用 pip install supervisor 安装的。pip 安装的 Supervisor 不会自动注册 systemd 服务,所以机器重启后 supervisord 不会自动启动。
可能之前安装的时候是手动启动了 supervisor:supervisord -c /etc/supervisor/supervisord.conf。
只是没有 Unit 文件就好办了,创建一个 Unit 文件就行:
sudo tee /etc/systemd/system/supervisord.service >/dev/null <<'EOF'
[Unit]
Description=Supervisor process control system
Documentation=http://supervisord.org
After=network.target
[Service]
Type=forking
PIDFile=/var/run/supervisord.pid
ExecStart=/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl -c /etc/supervisor/supervisord.conf shutdown
ExecReload=/usr/local/bin/supervisorctl -c /etc/supervisor/supervisord.conf reload
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now supervisord
sudo systemctl status supervisord
# 查看 Supervisor 管理的进程
sudo supervisorctl -c /etc/supervisor/supervisord.conf status