php 实现常驻进程
PHP 实现常驻进程的方法
在 PHP 中实现常驻进程通常用于后台任务、队列处理或定时任务等场景。以下是几种常见的方法:
使用 pcntl_fork 创建子进程
PHP 的 pcntl 扩展提供了进程控制功能,可以通过 pcntl_fork 创建子进程实现常驻。
<?php
// 创建子进程
$pid = pcntl_fork();
if ($pid == -1) {
die('无法创建子进程');
} elseif ($pid) {
// 父进程退出
exit();
} else {
// 子进程成为常驻进程
while (true) {
// 执行任务
file_put_contents('log.txt', date('Y-m-d H:i:s') . "\n", FILE_APPEND);
sleep(5);
}
}
使用 nohup 命令
通过 nohup 命令可以让 PHP 脚本在后台运行,即使终端关闭也不会停止。

nohup php your_script.php > /dev/null 2>&1 &
使用 Supervisor 管理进程
Supervisor 是一个进程管理工具,可以监控和重启常驻进程。
- 安装 Supervisor:
sudo apt-get install supervisor
- 配置 Supervisor:
创建配置文件 /etc/supervisor/conf.d/your_script.conf:

[program:your_script]
command=php /path/to/your_script.php
autostart=true
autorestart=true
stderr_logfile=/var/log/your_script.err.log
stdout_logfile=/var/log/your_script.out.log
- 启动 Supervisor:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start your_script
使用 systemd 服务
systemd 是 Linux 的系统和服务管理器,可以用于管理常驻进程。
- 创建服务文件
/etc/systemd/system/your_script.service:
[Unit]
Description=Your PHP Script
[Service]
ExecStart=php /path/to/your_script.php
Restart=always
[Install]
WantedBy=multi-user.target
- 启动服务:
sudo systemctl daemon-reload
sudo systemctl start your_script
sudo systemctl enable your_script
使用 while 循环
在脚本中使用无限循环实现常驻:
<?php
while (true) {
// 执行任务
file_put_contents('log.txt', date('Y-m-d H:i:s') . "\n", FILE_APPEND);
sleep(5);
}
注意事项
- 常驻进程需要处理内存泄漏问题,避免内存无限增长。
- 使用
try-catch捕获异常,防止进程意外退出。 - 记录日志以便排查问题。
- 考虑使用进程管理工具如 Supervisor 或
systemd管理进程生命周期。
以上方法可以根据具体需求选择适合的方案实现 PHP 常驻进程。






