linux centos 安装进程守护 安装supervisor

在 CentOS 上安装 Supervisor 并配置守护这两个 Python 进程的详细步骤,包括日志设置。

1. 安装 Supervisor

CentOS 默认不包含 Supervisor,需要通过以下步骤安装:

# 安装 EPEL 仓库(提供 Supervisor 软件包)
sudo yum install -y epel-release

# 安装 Supervisor
sudo yum install -y supervisor

2. 启动并启用 Supervisor

确保 Supervisor 开机自启并启动服务:

# 启动 Supervisor 服务
sudo systemctl start supervisord

# 设置 Supervisor 开机自启
sudo systemctl enable supervisord

3. 配置 Supervisor

Supervisor 的配置文件通常位于 /etc/supervisord.conf/etc/supervisord.d/*.conf。我们将为两个 Python 进程创建配置文件。

创建日志目录

确保日志目录存在:

mkdir -p /home/python/tool/plat/logs
编辑 Supervisor 配置文件

/etc/supervisord.d/ 目录下创建配置文件,例如 plat_processes.ini

sudo mkdir -p /etc/supervisord.d
sudo nano /etc/supervisord.d/plat_processes.ini

添加以下内容:

[program:httprelease]
command=python3 /home/python/tool/plat/httprelease.py
directory=/home/python/tool/plat
autostart=true
autorestart=true
startsecs=10
stopwaitsecs=10
stdout_logfile=/home/python/tool/plat/logs/httprelease.log
stderr_logfile=/home/python/tool/plat/logs/httprelease_error.log
user=root
environment=PYTHONPATH="/home/python/tool/plat"

[program:http_up_release]
command=python3 /home/python/tool/plat/http_up_release.py
directory=/home/python/tool/plat
autostart=true
autorestart=true
startsecs=10
stopwaitsecs=10
stdout_logfile=/home/python/tool/plat/logs/http_up_release.log
stderr_logfile=/home/python/tool/plat/logs/http_up_release_error.log
user=root
environment=PYTHONPATH="/home/python/tool/plat"

说明

  • command:指定运行的命令。
  • directory:进程运行的工作目录。
  • autostart:Supervisor 启动时自动启动进程。
  • autorestart:进程异常退出时自动重启。
  • stdout_logfilestderr_logfile:分别指定标准输出和错误日志的路径。
  • user:运行进程的用户(根据实际需求可修改为其他用户)。
  • environment:设置环境变量,确保 Python 脚本能找到依赖。

4. 检查配置文件权限

确保日志目录和文件的权限正确:

sudo chown -R root:root /home/python/tool/plat/logs
sudo chmod -R 755 /home/python/tool/plat/logs

5. 重新加载 Supervisor 配置

使配置生效:

# 重新加载配置
sudo supervisorctl reread
sudo supervisorctl update

6. 管理进程

启动、停止或检查进程状态:

# 启动所有进程
sudo supervisorctl start all

# 检查进程状态
sudo supervisorctl status

# 停止特定进程(例如 httprelease)
sudo supervisorctl stop httprelease

# 重启特定进程
sudo supervisorctl restart httprelease

7. 验证日志

检查日志文件是否生成:

ls /home/python/tool/plat/logs

你应该看到以下文件:

  • httprelease.loghttprelease_error.log
  • http_up_release.loghttp_up_release_error.log

8. 常见问题排查

  • Supervisor 服务未启动:检查 systemctl status supervisord
  • 进程未运行:检查日志文件 /home/python/tool/plat/logs/*_error.log 查看错误信息。
  • 权限问题:确保 /home/python/tool/plat 目录和脚本文件有正确权限,例如:
sudo chmod -R 755 /home/python/tool/plat
sudo chown -R root:root /home/python/tool/plat

9. 验证 Supervisor 状态

运行以下命令确认进程状态:

sudo supervisorctl status

输出示例:

httprelease                      RUNNING   pid 12345, uptime 0:01:00
http_up_release                  RUNNING   pid 12346, uptime 0:01:00

10.ini文件解析:

[program:httprelease]

命令:指定要运行的程序,这里使用 python3 执行 httprelease.py 脚本

必须使用绝对路径,确保 Supervisor 能找到脚本

command=python3 /home/python/tool/plat/httprelease.py

工作目录:进程运行时的工作目录,Supervisor 在执行命令前会切换到此目录

确保脚本的相对路径(如文件读写)正确解析

directory=/home/python/tool/plat

自动启动:控制 Supervisor 启动时是否自动运行此程序

true 表示 Supervisor 服务启动时自动运行,false 需手动启动

autostart=true

自动重启:进程异常退出后是否自动重启

true 表示自动重启,false 不重启,unexpected 仅在非预期退出码时重启

autorestart=true

启动时间:进程启动后需运行的秒数才算“成功启动”

如果进程在 10 秒内退出,Supervisor 认为启动失败

startsecs=10

停止等待时间:停止进程时等待的最长时间(秒)

如果进程在 10 秒内未退出,Supervisor 会强制终止(SIGKILL)

stopwaitsecs=10

标准输出日志:进程的标准输出(如 print())重定向到此文件

需确保日志目录存在且有写权限

stdout_logfile=/home/python/tool/plat/logs/httprelease.log

标准错误日志:进程的错误信息(如异常堆栈)重定向到此文件

便于调试问题,需确保日志目录存在且有写权限

stderr_logfile=/home/python/tool/plat/logs/httprelease_error.log

运行用户:指定运行进程的用户

使用 root 确保权限,建议用非 root 用户以提高安全性

user=root

环境变量:设置进程运行时的环境变量

PYTHONPATH 指定模块搜索路径,确保脚本能找到依赖模块

environment=PYTHONPATH=“/home/python/tool/plat”

[program:http_up_release]

命令:指定要运行的程序,这里使用 python3 执行 http_up_release.py 脚本

必须使用绝对路径,确保 Supervisor 能找到脚本

command=python3 /home/python/tool/plat/http_up_release.py

工作目录:进程运行时的工作目录,Supervisor 在执行命令前会切换到此目录

确保脚本的相对路径(如文件读写)正确解析

directory=/home/python/tool/plat

自动启动:控制 Supervisor 启动时是否自动运行此程序

true 表示 Supervisor 服务启动时自动运行,false 需手动启动

autostart=true

自动重启:进程异常退出后是否自动重启

true 表示自动重启,false 不重启,unexpected 仅在非预期退出码时重启

autorestart=true

启动时间:进程启动后需运行的秒数才算“成功启动”

如果进程在 10 秒内退出,Supervisor 认为启动失败

startsecs=10

停止等待时间:停止进程时等待的最长时间(秒)

如果进程在 10 秒内未退出,Supervisor 会强制终止(SIGKILL)

stopwaitsecs=10

标准输出日志:进程的标准输出(如 print())重定向到此文件

需确保日志目录存在且有写权限

stdout_logfile=/home/python/tool/plat/logs/http_up_release.log

标准错误日志:进程的错误信息(如异常堆栈)重定向到此文件

便于调试问题,需确保日志目录存在且有写权限

stderr_logfile=/home/python/tool/plat/logs/http_up_release_error.log

运行用户:指定运行进程的用户

使用 root 确保权限,建议用非 root 用户以提高安全性

user=root

环境变量:设置进程运行时的环境变量

PYTHONPATH 指定模块搜索路径,确保脚本能找到依赖模块

environment=PYTHONPATH=“/home/python/tool/plat”

完成以上步骤后,Supervisor 将守护你的两个 Python 进程,并将日志输出到指定目录。

你可能感兴趣的:(linux,centos,运维)