Supervisor
是一个进程管理工具,可以用于管理和监控进程,特别是在 Linux 和 Unix 系统中。在 Python 中使用 Supervisor
,通常的用途是通过 supervisord
启动和管理你的 Python 应用。
https://github.com/Supervisor/supervisor
下面是如何在 Python 项目中使用 Supervisor
的步骤:
1. 安装 Supervisor
你可以通过 pip
安装 supervisor
:
pip install supervisor
2. 配置 supervisord
配置文件
supervisor
的配置文件通常位于 /etc/supervisord.conf
或你自己指定的路径。你可以创建一个新的配置文件来配置 supervisord
启动 Python 应用。
例如,在项目根目录下创建一个配置文件 supervisord.conf
:
[unix_http_server]
file=/tmp/supervisor.sock ; Unix socket file for communication with supervisorctl
[supervisord]
logfile=/var/log/supervisord.log ; Log file
pidfile=/var/run/supervisord.pid ; PID file
childlogdir=/var/log ; Log for child processes
[program:myapp]
command=python3 /path/to/your/app.py ; Your Python application
autostart=true ; Start the app when supervisor starts
autorestart=true ; Restart the app if it crashes
stderr_logfile=/var/log/myapp.err.log ; Error log file
stdout_logfile=/var/log/myapp.out.log ; Output log file
environment=ENV_VAR=value ; Environment variables, if needed
这里的配置项说明:
-
[unix_http_server]
: 用于定义与supervisord
通信的 Unix Socket 地址。 -
[supervisord]
: 定义supervisord
的主配置,控制日志、PID 文件等。 -
[program:myapp]
: 这是你配置的 Python 应用程序的定义。command
: 启动你的 Python 程序的命令。autostart
: 启动时自动启动该程序。autorestart
: 如果程序崩溃,自动重启它。stderr_logfile
和stdout_logfile
: 定义标准输出和错误日志的存储路径。environment
: 设置环境变量,如果有需要的话。
3. 启动 supervisord
通过以下命令启动 supervisord
,并加载你配置的 supervisord.conf
文件:
supervisord -c /path/to/your/supervisord.conf
这将启动 supervisord
并使其开始管理配置中定义的进程。
4. 管理进程
你可以使用 supervisorctl
来管理启动的进程:
-
查看所有进程的状态:
supervisorctl status
-
启动一个进程:
supervisorctl start myapp
-
停止一个进程:
supervisorctl stop myapp
-
重启一个进程:
supervisorctl restart myapp
5. 配置为开机自启动
为了让 supervisord
在系统启动时自动启动,你可以配置系统的服务管理器(如 systemd
或 init.d
)来启动 supervisord
。
对于 systemd
,你可以创建一个服务文件,例如 /etc/systemd/system/supervisord.service
:
[Unit]
Description=Supervisor process control system and service
After=network.target
[Service]
ExecStart=/usr/local/bin/supervisord -c /path/to/your/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl shutdown
Restart=always
[Install]
WantedBy=multi-user.target
然后使用 systemctl
启动并设置为开机自启动:
systemctl start supervisord
systemctl enable supervisord
6. 检查日志
检查应用程序的日志以确认它是否正常工作:
tail -f /var/log/myapp.out.log
tail -f /var/log/myapp.err.log
总结
使用 Supervisor
可以有效地管理和监控 Python 应用,确保它们在系统启动时自动运行,并在崩溃时重新启动。通过配置 supervisord.conf
文件,你可以非常灵活地控制进程的启动、停止、重启等操作。