在 1Panel PHP 运行环境中配置守护进程(Supervisor)

概述

本教程将介绍如何在 1Panel 的 PHP 运行环境中配置和使用守护进程(Supervisor)功能。1Panel V2 版本在 PHP 运行环境管理方面进行了重大改进,新增了内置的守护进程配置功能,使得 PHP 应用的进程管理变得更加简单和可靠。

1Panel V2 PHP 运行环境的改进

V1 版本的局限性

在 1Panel V1 版本中,如果需要运行 PHP 守护进程,用户需要通过系统的计划任务功能,创建容器内运行的脚本任务,来启动和管理 PHP 脚本。或者通过自定义的 PHP 容器镜像,在容器内运行守护进程,使用起来比较麻烦。

V2 版本的新特性

1Panel V2 版本在 PHP 运行环境中集成了 Supervisor 功能,带来了以下改进:

  • 内置守护进程管理:直接在 PHP 运行环境界面中配置和管理守护进程

  • 可视化配置界面:通过图形界面轻松添加、编辑和删除守护进程配置

  • 实时状态监控:可以实时查看进程运行状态、日志输出等信息

  • 自动重启机制:支持进程异常退出时自动重启

PHP 中使用守护进程的常见场景

1. 队列处理(Queue Processing)

在 Web 应用中,某些任务(如邮件发送、图片处理、数据同步等)不适合在用户请求中同步执行,需要异步处理:

<?php
while (true) {
    $job = getNextJobFromQueue();
    if ($job) {
        processEmailJob($job);
    }
    sleep(1);
}

2. 定时任务(Cron Jobs)

需要定期执行的任务,如数据清理、报表生成、缓存更新等:

<?php
while (true) {
    if (isTimeToClean()) {
        cleanOldData();
        updateCache();
    }
    sleep(60); // 每分钟检查一次
}

3. WebSocket 服务器

实时通信应用需要持续运行的 WebSocket 服务器:

<?php
$server = new WebSocketServer();
$server->on('connection', function($client) {
    // 处理客户端连接
});
$server->run();

4. 数据同步服务

需要持续监控和同步数据的服务:

<?php
while (true) {
    syncDataFromExternalAPI();
    processSyncResults();
    sleep(30); // 每30秒同步一次
}

5. 监控和健康检查

持续监控系统状态和健康检查的服务:

<?php
while (true) {
    checkSystemHealth();
    sendHealthReport();
    sleep(300); // 每5分钟检查一次
}

具体使用步骤示例

前提条件

  • 已经创建了 PHP 8 版本以上的运行环境,假设运行环境名称为 my-php-runtime

  • 已经使用这个运行环境创建了网站,假设网站域名为 phpdemo.domain.name

第一步:准备 PHP 守护进程脚本

在网站根目录下创建一个示例守护进程脚本:

<?php
// 设置错误报告和时区
error_reporting(E_ALL);
ini_set('display_errors', 1);
date_default_timezone_set('Asia/Shanghai');

// 日志函数
function writeLog($message) {
    $logFile = __DIR__ . '/queue-worker.log';
    $timestamp = date('Y-m-d H:i:s');
    $logMessage = "[$timestamp] $message" . PHP_EOL;
    echo $logMessage;
    file_put_contents($logFile, $logMessage, FILE_APPEND | LOCK_EX);
}

writeLog('队列处理器启动');

// 模拟队列处理循环
$counter = 0;
while (true) {
    try {
        $counter++;
        writeLog("处理第 $counter 个任务");
        
        // 模拟处理任务
        sleep(5);
        
        // 每处理10个任务后输出一次状态
        if ($counter % 10 == 0) {
            writeLog("已处理 $counter 个任务");
        }
        
    } catch (Exception $e) {
        writeLog("错误: " . $e->getMessage());
        sleep(10); // 出错后等待10秒再继续
    }
}

create-php-file.png

第二步:配置守护进程

  1. 在 PHP 运行环境管理页面,找到刚创建的运行环境

  2. 在更多操作中,点击 进程守护,打开进程守护列表

  3. 点击 创建守护进程

  4. 填写配置信息:

  • 名称:queue-worker

  • 启动用户:www-data(或其他指定用户)

  • 运行目录(需要填写容器内的路径):/www/sites/phpdemo.domain.name/index

  • 启动命令:php queue-worker.php

  • 进程数量:1(根据需求调整)

  • 自动重启:启用

  1. 点击 确定 保存配置

create-supervisor.png

第四步:启动和管理守护进程

  1. 查看状态

    • 进程创建后将自动启动,在守护进程列表中可以查看到状态为 `运行中`

  2. 停止进程

    • 点击管理列的已启动按钮可以优雅地停止进程

    • 系统会等待配置的停止等待时间后强制终止

  3. 重启进程

    • 点击 重启 按钮可以重新启动进程

    • 适用于配置更新后的重新加载

第五步:进程状态和日志查看

  1. 实时日志查看

    • 点击操作列的 日志 按钮

    • 可以实时查看标准输出和错误输出

  2. 进程状态查看

    • 将鼠标悬停运行中状态上时,将显示当前守护进程的进程信息

supervisor-log.png

故障排除

常见问题及解决方案

  1. 进程无法启动

    • 检查 PHP 脚本路径是否正确

    • 确认脚本有执行权限

    • 查看错误日志获取详细信息

    • 在运行环境对应容器的命令行终端,使用相同用户执行脚本查看是否正常运行

  2. 进程频繁重启

    • 检查脚本中的错误处理逻辑

    • 确认依赖服务是否正常运行

    • 调整启动重试次数和间隔

  3. 日志文件权限问题

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

    • 检查用户权限设置

总结

1Panel V2 版本的 PHP 运行环境集成的守护进程功能大大简化了 PHP 应用的进程管理。通过可视化的配置界面,用户可以轻松地创建、管理和监控 PHP 守护进程,无需手动配置复杂的系统服务。这一改进使得 1Panel 在 PHP 应用部署和管理方面更加完善和易用。

无论是队列处理、定时任务还是实时服务,都可以通过 1Panel 的守护进程功能来实现稳定可靠的运行。结合完善的监控和日志功能,用户可以更好地维护和管理 PHP 应用的生产环境。

相关链接

https://1panel.cn/docs/v2/user_manual/websites/php/http://supervisord.org/

评论

购物车

总计

¥1299