在macos上让frankenphp v1.3长期稳定运行,必须通过launchdaemons配置为系统级守护进程:创建专用用户frankenphp,设置plist文件指定programarguments、runatload、keepalive、username等关键项,加载后用launchctl启动并验证日志,确保终端关闭或用户登出后服务持续运行。

在macOS上让FrankenPHP v1.3长期稳定运行,必须将其设为系统级守护进程,否则终端关闭或用户登出后服务立即终止。
确认FrankenPHP已正确安装并可手动运行
打开终端,执行 frankenphp --version,输出应为 v1.3.x(如 v1.3.2)。若提示 command not found,请先通过 Homebrew 安装:brew install frankenphp。
手动启动一次验证:运行 frankenphp server --document-root ./public --router ./public/index.php,访问 http://localhost:8080 确认页面正常加载。这一步不可跳过——【未验证手动运行成功,后续守护配置必然失败】。
创建专用用户与工作目录
新建系统用户 frankenphp,禁用登录权限:
sudo sysadminctl -addUser frankenphp -password "x" -shell /usr/bin/false -home /var/lib/frankenphp
创建项目根目录并授权:
sudo mkdir -p /var/lib/frankenphp/appsudo chown -R frankenphp:staff /var/lib/frankenphpsudo chmod 755 /var/lib/frankenphp
把你的 PHP 应用完整复制进 /var/lib/frankenphp/app,确保其中包含 public/ 和 public/index.php。路径硬编码错误是后台启动失败的最常见原因。
编写plist服务定义文件
使用 nano 编辑器创建守护配置:
sudo nano /Library/LaunchDaemons/dev.frankenphp.server.plist
粘贴以下内容(注意替换 YOUR_APP_PATH 为实际绝对路径,例如 /var/lib/frankenphp/app):
<?xml version="1.0" encoding="UTF-8"?><br><br><plist version="1.0"><br><dict><br><key>Label</key><br><string>dev.frankenphp.server</string><br><key>ProgramArguments</key><br><array><br><string>/opt/homebrew/bin/frankenphp</string><br><string>server</string><br><string>--document-root</string><br><string>YOUR_APP_PATH/public</string><br><string>--router</string><br><string>YOUR_APP_PATH/public/index.php</string><br><string>--addr</string><br><string>:8080</string><br></array><br><key>RunAtLoad</key><br><true></true><br><key>KeepAlive</key><br><true></true><br><key>UserName</key><br><string>frankenphp</string><br><key>GroupName</key><br><string>staff</string><br><key>StandardOutPath</key><br><string>/var/log/frankenphp.log</string><br><key>StandardErrorPath</key><br><string>/var/log/frankenphp.err</string><br></dict><br></plist>
保存后执行:sudo chmod 644 /Library/LaunchDaemons/dev.frankenphp.server.plist。
加载并启用守护服务
第一步:加载配置到 launchd:
sudo launchctl load /Library/LaunchDaemons/dev.frankenphp.server.plist
第二步:立即启动服务:
sudo launchctl start dev.frankenphp.server
第三步:验证状态(输出中 Status 值应为 0):
sudo launchctl list | grep frankenphp
查看日志确认无报错:tail -f /var/log/frankenphp.log。如果看到 Server started on :8080 且无 panic 或 permission denied 提示,说明已就绪。
重启系统后服务将自动拉起。此时关闭终端、切换用户、甚至注销当前会话,FrankenPHP 仍持续响应请求。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











