温馨提示×

CentOS如何配置PHP守护

小樊
53
2026-07-19 11:34:29
栏目: 编程语言

CentOS 上配置 PHP 守护进程(Daemon),常见做法有几种,取决于你的使用场景。下面按从简单到规范的方式说明,并给出可直接用的示例。


一、最简单方式:用 nohupscreen(不推荐生产)

适合临时运行 PHP 脚本。

nohup php /path/to/script.php > /var/log/php_daemon.log 2>&1 &

查看进程:

ps -ef | grep script.php

⚠️ 缺点:

  • 服务器重启不会自动启动
  • 进程挂了不会自动恢复

二、使用 systemd(✅ 推荐,CentOS 7+)

这是 生产环境最标准做法

1️⃣ 编写 PHP 守护脚本

<?php
// /opt/daemon/worker.php
while (true) {
    file_put_contents('/tmp/php_daemon.log', date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);
    sleep(5);
}

⚠️ 实际项目中建议加 pcntl_signaltry/catch、退出条件


2️⃣ 创建 systemd 服务文件

vim /etc/systemd/system/php-daemon.service

内容示例:

[Unit]
Description=PHP Daemon Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/php /opt/daemon/worker.php
Restart=always
RestartSec=5
User=www
Group=www
StandardOutput=append:/var/log/php-daemon.log
StandardError=append:/var/log/php-daemon.log

[Install]
WantedBy=multi-user.target

如果不知道 PHP 路径:

which php

3️⃣ 创建日志文件并设置权限

touch /var/log/php-daemon.log
chown www:www /var/log/php-daemon.log

4️⃣ 启动并设置开机自启

systemctl daemon-reload
systemctl start php-daemon
systemctl enable php-daemon

查看状态:

systemctl status php-daemon

查看日志:

journalctl -u php-daemon -f

✅ 优点:

  • 自动重启
  • 服务器重启自动运行
  • 可限制内存、CPU(cgroup)

三、使用 Supervisor(✅ 多进程推荐)

适合 多个 PHP 守护进程

1️⃣ 安装 Supervisor

yum install -y epel-release
yum install -y supervisor

2️⃣ 配置 PHP 守护

vim /etc/supervisord.d/php-daemon.ini
[program:php-daemon]
command=/usr/bin/php /opt/daemon/worker.php
directory=/opt/daemon
autostart=true
autorestart=true
user=www
redirect_stderr=true
stdout_logfile=/var/log/php-daemon.log

3️⃣ 启动 Supervisor

systemctl enable supervisord
systemctl start supervisord

管理进程:

supervisorctl status
supervisorctl restart php-daemon

✅ 优点:

  • 自动重启
  • 多进程管理方便
  • 日志管理成熟

四、PHP 自身实现 Daemon(进阶)

使用 pcntlposix

function daemonize() {
    if (pcntl_fork()) exit;
    posix_setsid();
    if (pcntl_fork()) exit;
    fclose(STDIN);
    fclose(STDOUT);
    fclose(STDERR);
}

⚠️ 不推荐新手直接使用,维护成本高。


五、推荐方案总结

场景 推荐方式
单进程守护 ✅ systemd
多进程 / 队列 ✅ Supervisor
临时测试 nohup
高性能常驻 PHP + systemd

六、如果你愿意,我可以进一步帮你

你可以告诉我:

  1. CentOS 版本(6 / 7 / 8 / Stream)
  2. PHP 版本
  3. 队列、定时任务、WebSocket、还是常驻脚本
  4. 是否需要 多进程

我可以直接给你一份 可复制粘贴的完整配置

0