当前位置:首页>php>用 Supervisor 管好 PHP 进程,效率直接拉满

用 Supervisor 管好 PHP 进程,效率直接拉满

  • 2026-10-10 12:19:32
用 Supervisor 管好 PHP 进程,效率直接拉满

做PHP开发的朋友应该都会遇到过这类麻烦,CLI 脚本跑一半意外中断、定时任务没执行完进程就挂了、手动重启进程浪费时间……其实这些问题Supervisor就能很好的解决。它能帮我们自动守护PHP进程,即使挂了也会自动重启,它还能统一管理多个进程,可以让你省出不少的精力去做核心开发。

1. 先搞懂Supervisor 到底是啥

Supervisor是一款轻量级的进程管理工具,是基于Python开发的,专门用来监控、启动、停止和重启进程。对于PHP的项目来说它最核心的作用是:

  • 防止PHP脚本(比如队列消费、数据同步脚本)意外退出
  • 不用手动盯着进程挂了会自动重启
  • 可以统一管理多个PHP进程,再也不用记一堆的启动命令

2. 如何快速安装

Supervisor是支持Linux/Unix系统的,Windows暂时不适用(Windows 可考虑其他工具)。不同系统安装命令不一样,下面这个直接抄就行:

① Ubuntu/Debian系统

# 更新软件源sudo apt update# 安装 Supervisorsudo apt install -y supervisor

② CentOS/RHEL系统

# 先装 epel 源(CentOS 自带源没有 Supervisor)sudo yum install -y epel-release# 安装 Supervisorsudo yum install -y supervisor

③ 验证安装

安装完成后启动Supervisor服务,再检查状态:

# 启动服务sudo systemctl start supervisord# 设置开机自启(避免服务器重启后失效)sudo systemctl enable supervisord# 检查是否运行正常(出现 active(running) 就是成功)sudo systemctl status supervisord

3. 核心配置可以让PHP进程更听话

Supervisor的配置分两部分,主配置(全局设置)和项目配置(单个 PHP 进程的设置)。主配置不用改太多重点是项目配置。

① 先看主配置(了解即可)

主配置文件路径:/etc/supervisor/supervisord.conf打开文件找到最后一行:

[include]files = /etc/supervisor/conf.d/*.conf

这行意思是所有放在 /etc/supervisor/conf.d/ 目录下、后缀为 .conf 的文件,都会被Supervisor加载。我们的PHP项目配置就放在这个目录里。

② 写PHP项目配置(关键步骤)

假设我们要管理一个PHP 数据同步脚本(路径:/var/www/project/sync_data.php),步骤如下:

  1. 在 conf.d 目录下新建配置文件,比如 php_sync.conf:
sudo nano /etc/supervisor/conf.d/php_sync.conf
  1. 粘贴以下配置(每个参数都标了注释,替换成自己的路径即可):
# 定义进程名称(自定义,唯一就行)[program:php_sync_data]# 关键:PHP 脚本的执行命令(先确认 PHP 路径,用 which php 可查)command=/usr/bin/php /var/www/project/sync_data.php# 脚本运行的用户(建议用 www-data 或项目所属用户,避免权限问题)user=www-data# Supervisor 启动时,自动启动这个脚本autostart=true# 脚本意外退出后,自动重启(true 表示总是重启)autorestart=true# 脚本退出后,延迟多久重启(单位:秒)startsecs=3# 日志文件路径(记录脚本输出,方便排查问题)stdout_logfile=/var/log/php_sync/stdout.logstderr_logfile=/var/log/php_sync/stderr.log# 日志文件最大大小(比如 50MB,满了会自动切割)stdout_logfile_maxbytes=50MB# 日志文件保留数量(最多保留 10 个旧日志)stdout_logfile_backups=10
  1. 保存退出(nano 编辑器按 Ctrl+O 保存,Ctrl+X 退出)。

  2. 让Supervisor加载新配置:

# 更新配置(加载新增的 php_sync.conf)sudo supervisorctl update# 启动刚才配置的进程(进程名就是 [program:] 后面的 php_sync_data)sudo supervisorctl start php_sync_data

4. 实战

很多 PHP 项目会用队列比如 Redis 队列、RabbitMQ处理异步任务(比如发送短信、生成报表),但队列消费进程很容易挂。用Supervisor守护就能高枕无忧了。

以Laravel队列为例,配置文件(/etc/supervisor/conf.d/laravel_queue.conf)这样写:

[program:laravel_queue_worker]# Laravel 队列消费命令(--daemon 表示后台运行)command=/usr/bin/php /var/www/laravel-project/artisan queue:work redis --daemon --tries=3user=www-dataautostart=trueautorestart=truestdout_logfile=/var/log/laravel_queue/stdout.logstderr_logfile=/var/log/laravel_queue/stderr.logstdout_logfile_maxbytes=50MBstdout_logfile_backups=10

然后加载配置并启动:

sudo supervisorctl updatesudo supervisorctl start laravel_queue_worker

这样即使队列进程意外退出,Supervisor也会自动重启不用再手动执行 artisan queue:work 了。

5. 常用命令

掌握几个核心命令,就能管好所有PHP进程:

# 查看所有进程状态(running 表示正常,stopped 表示停止)sudo supervisorctl status# 启动单个进程(替换成你的进程名)sudo supervisorctl start php_sync_data# 停止单个进程sudo supervisorctl stop php_sync_data# 重启单个进程(修改脚本后,用这个命令让脚本生效)sudo supervisorctl restart php_sync_data# 停止所有进程sudo supervisorctl stop all# 查看 Supervisor 日志(排查进程启动失败问题)sudo tail -f /var/log/supervisor/supervisord.log

6. 避坑指南

① 进程启动失败?

先看日志配置里写了 stdout_logfile 和 stderr_logfile,用 tail 命令看日志内容:

sudo tail -f /var/log/php_sync/stderr.log

常见原因:PHP路径错了(用 which php 确认)、脚本权限不够(给脚本加执行权限:chmod +x /var/www/project/sync_data.php)、日志目录没创建(手动创建:sudo mkdir -p /var/log/php_sync)。

② 服务器重启后进程没启动

忘记设置Supervisor开机自启了!执行下面这行命令:

sudo systemctl enable supervisord

最后说两句

Supervisor对PHP项目来说,是个小而美的工具。不用写复杂的shell脚本,几行配置就能搞定进程守护,省出的时间能多写几个功能、多测几个bug。刚开始用可能记不住命令,收藏这篇文章,下次需要时直接抄配置、查命令就行~

最新文章

随机文章