Hyperf 项目在 Linux 单机环境通过 systemd 实现开机自启,需编写标准 .service 文件、确保 PHP/Swoole 环境就绪、设置非 root 用户权限、配置重启策略与日志,并执行 daemon-reload、enable、start 三步启用。

Hyperf 项目在 Linux 单机环境实现开机自启,核心是用 systemd 将其封装为系统服务。它不是简单地把 php bin/hyperf.php start 塞进 rc.local,而是要适配 systemd 的生命周期管理:正确声明依赖、设置用户权限、处理进程模型、配置重启策略和日志落盘。只要按规范写好 .service 文件并启用,就能做到“一开机就跑、挂了自动拉、出错有日志、状态可查可控”。
确认 Hyerf 运行前提已就绪
systemd 不负责解决底层依赖,只负责启动服务。所以部署前必须确保:
- PHP 版本 ≥ 8.0,且已启用
pcntl、mbstring、bcmath、sockets等扩展 - Swoole 扩展已安装(推荐 v5.1+),
php -m | grep swoole可见输出,且coroutine => enabled - 项目目录权限合理,例如
/var/www/my-hyperf归属www-data:www-data或指定用户 -
.env中APP_DEBUG=false已关闭调试模式,避免敏感信息泄露 - 手动执行
php bin/hyperf.php start能正常监听(如 9501 端口),无报错、可访问
编写标准的 systemd 服务文件
创建 /etc/systemd/system/hyperf-app.service,内容需覆盖关键环节:
跨平台内容管理系统构建与修改工作流(WordPress、Shopify、Wix、Squarespace、Drupal、WooCommerce、Joomla、HubSpot CMS Hub、Web…)
[Unit] Description=Hyperf Application Service After=network.target Wants=network-online.target StartLimitIntervalSec=0 [Service] Type=simple User=www-data Group=www-data WorkingDirectory=/var/www/my-hyperf Environment=PATH=/usr/bin:/bin Environment=HOME=/var/www/my-hyperf ExecStart=/usr/bin/php /var/www/my-hyperf/bin/hyperf.php start Restart=on-failure RestartSec=3 TimeoutSec=60 KillSignal=SIGTERM SyslogIdentifier=hyperf-app [Install] WantedBy=multi-user.target
-
Type=simple:Hyperf 启动后主进程持续运行,无需 fork 后退出 -
User/Group:禁止用 root 运行,降低安全风险;确保该用户对项目目录有读写权限(尤其runtime/) -
Environment=HOME:部分扩展(如 opcache)依赖 HOME 路径,显式声明更稳妥 -
Restart=on-failure:仅在非 0 退出码时重启,比always更严谨,避免无限崩溃循环 -
SyslogIdentifier:让 journalctl 日志带标识,查日志时可直接journalctl -u hyperf-app
启用服务并验证行为
保存后执行三步操作,每步都不可跳过:
-
sudo systemctl daemon-reload:让 systemd 重新读取所有 unit 文件 -
sudo systemctl enable hyperf-app.service:建立软链到/etc/systemd/system/multi-user.target.wants/,确保开机加载 -
sudo systemctl start hyperf-app.service:立即启动,用于首次测试
验证是否生效:
- 查状态:
systemctl status hyperf-app—— 应显示active (running) - 看日志:
journalctl -u hyperf-app -n 20 -f—— 实时跟踪最后 20 行输出 - 测端口:
ss -tlnp | grep ':9501'—— 确认监听进程归属正确用户 - 模拟崩溃:
sudo kill -TERM $(pgrep -f "hyperf.php start")—— 观察是否在 3 秒内自动重启
进阶:适配生产环境的细节优化
单机部署不等于裸奔,几个关键点能显著提升稳定性:
-
内存与协程限制:在
config/autoload/server.php中设置'worker_num' => 4和'max_coroutine' => 3000,防止资源耗尽 -
PID 文件管理:Hyperf 默认生成
runtime/hyperf.pid,可在 service 文件中加PIDFile=/var/www/my-hyperf/runtime/hyperf.pid,便于精确控制 -
日志分离:若需独立日志文件,可在
ExecStart后追加重定向,例如> /var/log/hyperf/app.log 2>&1,但建议优先用 journalctl 统一管理 -
启动超时兜底:加上
TimeoutStartSec=90,避免因慢加载(如数据库连接阻塞)导致 systemd 误判失败

















