Hyperf 在 Ubuntu 上需通过 Supervisor(或 systemd)接管前台启动以实现稳定长期运行,核心是正确配置绝对路径、项目目录、autostart/autorestart、足够长的 startsecs(≥10)、显式 environment 及禁用 --daemonize,并确保手动前台启动成功为前提。

在 Ubuntu 上让 Hyperf 稳定长期运行,核心不是“守护进程”本身,而是用 Supervisor(或 systemd)接管前台启动的 Hyperf 服务,并确保它不退出、能自愈。关键在于路径、环境、启动模式和启动耗时这四点,配错一个就会静默失败。
确认 Hyperf 能手动前台启动
这是前置底线,否则守护配置全是空谈:
- 进入项目根目录,执行 php bin/hyperf.php start —— 必须看到类似
Server started: http://127.0.0.1:9501且进程持续运行(不要加--daemonize) - 若报错,先检查:PHP ≥ 8.0、Swoole ≥ 5.0 且 coroutine → enabled、opcache.enable_cli=0 已写入 php.ini,改完后重启终端或重载 PHP 配置
- 首次启动前建议运行 php bin/hyperf.php di:generate,避免依赖注入类缺失
安装并启用 Supervisor
Ubuntu 官方源安装最稳,无需 pip:
- 运行 sudo apt update && sudo apt install -y supervisor
- 启动服务:sudo systemctl enable --now supervisor
- 验证状态:sudo supervisorctl status 应显示
supervisor is running
编写 program 配置文件(关键!)
在 /etc/supervisor/conf.d/my-hyperf.conf 中写入以下内容(替换为你的实际路径):
-
command:必须用绝对路径,例如
/usr/bin/php /var/www/myapp/bin/hyperf.php start(用which php查准路径) -
directory:设为项目根目录,如
/var/www/myapp,否则注解扫描和配置加载会失败 -
autostart 和 autorestart 设为
true;startsecs 至少设为10(Hyperf 初始化慢,1 秒默认值会导致反复重启) -
environment:显式声明必要变量,例如
APP_ENV="prod",APP_DEBUG="false" -
stdout_logfile 和 stderr_logfile 指向可写路径,如
/var/log/supervisor/myapp-stdout.log(需提前sudo mkdir -p /var/log/supervisor) - 务必删除
--daemonize参数——Supervisor 只管理前台进程
加载配置并验证
完成配置后执行三步:
- sudo supervisorctl reread(重新读取 conf.d 下的新配置)
- sudo supervisorctl update(应用变更,会自动 add 新 program)
- sudo supervisorctl start my-hyperf(启动),再用 status 查看是否 RUNNING
- 访问
http://127.0.0.1:9501或查看日志确认服务已响应


















