当前位置: 首页 > news >正文

使用Supervisor管理PHP脚本进程任务

Supervisor 是一个用 Python 编写的进程管理工具,用于监控和管理后台进程。它可以帮助你确保某些进程(如 PHP 消费者脚本)持续运行,并在进程崩溃或服务器重启后自动重启。

在 PHP + Redis 实现异步处理的场景中,Supervisor 可以用来管理消费者进程,确保它们始终在运行。


一、安装 Supervisor

在 Linux 系统上,可以通过以下命令安装 Supervisor

sudo apt-get update
sudo apt-get install supervisor

安装完成后,Supervisor 会自动启动,并在系统启动时自动运行。


二、配置 Supervisor

Supervisor 的配置文件通常位于 /etc/supervisor/conf.d/ 目录下。你可以为每个进程创建一个单独的配置文件。

1. 创建配置文件

例如,为 PHP 消费者脚本创建一个配置文件:

sudo nano /etc/supervisor/conf.d/php_worker.conf
2. 编辑配置文件

在配置文件中添加以下内容:

[program:php_worker]
command=php /path/to/your/consumer.php ; 需要运行的命令
directory=/path/to/your/working/directory ; 工作目录
autostart=true ; 是否自动启动
autorestart=true ; 是否自动重启
stderr_logfile=/var/log/php_worker.err.log ; 错误日志文件
stdout_logfile=/var/log/php_worker.out.log ; 输出日志文件
user=www-data ; 运行进程的用户
numprocs=4 ; 启动的进程数量
process_name=%(program_name)s_%(process_num)02d ; 进程名称格式
3. 保存并退出

保存文件并退出编辑器。


三、启动 Supervisor

1. 更新 Supervisor 配置

在添加或修改配置文件后,需要更新 Supervisor 的配置:

sudo supervisorctl reread
sudo supervisorctl update
2. 启动进程

使用以下命令启动配置文件中定义的进程:

sudo supervisorctl start php_worker:*
3. 查看进程状态

可以使用以下命令查看进程状态:

sudo supervisorctl status

输出示例:

php_worker:php_worker_00   RUNNING   pid 12345, uptime 0:00:10
php_worker:php_worker_01   RUNNING   pid 12346, uptime 0:00:10
php_worker:php_worker_02   RUNNING   pid 12347, uptime 0:00:10
php_worker:php_worker_03   RUNNING   pid 12348, uptime 0:00:10

常用 Supervisor 命令

  • 启动进程

    sudo supervisorctl start <program_name>
  • 停止进程

    sudo supervisorctl stop <program_name>
  • 重启进程

    sudo supervisorctl restart <program_name>
  • 重新加载配置

    sudo supervisorctl reload
  • 查看所有进程状态

    sudo supervisorctl status

日志文件

Supervisor 会将进程的标准输出和错误输出重定向到指定的日志文件中。你可以通过以下命令查看日志:

tail -f /var/log/php_worker.out.log
tail -f /var/log/php_worker.err.log

总结

使用 Supervisor 可以轻松管理 PHP 消费者进程,确保它们持续运行并在崩溃后自动重启。通过配置 numprocs,你还可以启动多个消费者进程,实现并行处理任务。

优点:
  • 简单易用,配置灵活。

  • 支持自动重启和日志管理。

  • 适合生产环境使用。

注意事项:
  • 确保 PHP 消费者脚本是长时间运行的(如 while (true) 循环)。

  • 如果消费者脚本需要处理大量任务,建议结合 Redis 的队列功能,实现任务分发和处理。

相关文章:

  • 有点感慨……
  • C语言(22)
  • 【实战】ChatChat0.3.1+DeepSeek+本地知识库部署使用(上)
  • rtthread的串口框架、485框架
  • c++中sleep是什么意思(不是Sleep() )
  • 保姆级教程 | Office-Word中图目录制作及不显示图注引文的方法
  • Linux第十四节 — 环境变量和进程地址空间
  • 在VS中如何将控制台(console)项目改为窗口(window)项目
  • python~http的请求参数中携带map
  • 【AI表格处理工具】
  • 如何使用Spring Boot实现商品的管理系统
  • [AI相关]生成视频-第一个项目,20k星开源MoneyPrinterTurbo
  • 【网络】高级IO(2)
  • NX二次开发搜索槽或者刻字面
  • 【第四节】C++设计模式(创建型模式)-Builder(建造者)模式
  • 2025年-G14-Lc88-278.第一个坏版本 -java版
  • 【电机控制】42步进电机+arduino:WHEELTEC_MS42DDC
  • ubuntu部署小笔记-采坑
  • 【Java】File 类
  • SQLite 删除表
  • 微软通讯软件Skype正式停止运营:斥资85亿美元购入,月活用户曾超3亿
  • 马上评|子宫肌瘤惊现男性患者,如此论文何以一路绿灯?
  • 贵州黔西游船倾覆事故70名落水人员在院救治,均为轻伤
  • 新华社:让历史照鉴未来
  • 击败老对手韩国队夺冠!国羽第14次问鼎苏迪曼杯创历史
  • 菲律宾首都机场航站楼外发生汽车冲撞事故致2死多伤