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

news/2025/2/23 18:48:45

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 的队列功能,实现任务分发和处理。


http://www.niftyadmin.cn/n/5863684.html

相关文章

机器翻译与语音识别技术:推动人机交互的新篇章

在数字化时代&#xff0c;语言不仅是人类交流的基本工具&#xff0c;也是连接不同文化和国家的桥梁。随着科技的飞速发展&#xff0c;机器翻译与语音识别技术作为语言处理领域的两大核心技术&#xff0c;正逐步改变着人类与计算机之间的交互方式。本文将深入探讨这两种技术的原…

vue-treeselect显示unknown的问题及解决

问题 解决办法 去node-modules包里面找到这个组件的源码&#xff0c;在它dist文件里面找到这个文件&#xff0c;然后搜索unknown&#xff0c;把它删掉就可以解决了。

使用AI创建流程图和图表的 3 种简单方法

你可能已经尝试过使用 LLMs 生成图像&#xff0c;但你有没有想过用它们来创建 流程图和图表&#xff1f;这些可视化工具对于展示流程、工作流和系统架构至关重要。 通常&#xff0c;在在线工具上手动绘制图表可能会耗费大量时间。但你知道吗&#xff1f;你可以使用 LLMs 通过简…

LLVM编译器简介

LLVM相关知识 LLVM是一个极具影响力的编译器基础设施项目&#xff0c;最初代表“Low Level Virtual Machine&#xff08;低级虚拟机&#xff09;” &#xff0c;如今已演变为一套通用的、强大的编译技术体系&#xff0c;为现代软件开发提供了高效的编译解决方案。 一、LLVM基…

前端接收后端19位数字参数,精度丢失的问题

这里写自定义目录标题 安装插件json-bigint在封装请求的文件中配置 安装插件json-bigint 前端一般都是用axios进行数据请求&#xff0c;故引入json-bigint。 npm install json-bigint在封装请求的文件中配置 axios.create()之前配置 import JSONBIG from json-bigint impor…

STM32-有关内存堆栈、map文件

STM32堆栈空间大小设置_stm32堆栈分配大小-CSDN博客 STM32堆栈的大小及内存四&#xff08;五&#xff09;区的分析 - 天街小雨润地狠 - 博客园 .map文件的位置

系统架构设计师备考策略

一、备考痛点 系统架构设计师考试以 知识体系庞杂、实践性强 著称&#xff0c;官方教材《系统架构设计师教程&#xff08;第2版&#xff09;》厚达 700 余页&#xff0c;若盲目通读耗时费力。根据近三年考情分析&#xff0c;“抓重点 分层突破 实战输出” 是高效通关的核心策…

个人环境配置--安装记录

根据显卡下载对应的cuda和cudnn 我使用的是docker,首先拉取镜像,我用的是ubuntu20.04 加速&#xff1a;pull hub.1panel.dev/ devel是开发版本 sudo docker pull hub.1panel.dev/nvidia/cuda:11.6.1-devel-ubuntu20.04先测试一下cuda有没有安装好 nvcc -V更新&#xff0c;安装…