参考资料

  1. Laravel Octane 与 Swoole 扩展的版本不兼容
  2. 端口还是被占用,但 PID 变了(从 244xx 变成了 261xx)。
  3. Nginx 无法连接到 Octane 监听的端口
  4. php --ri swoole 的输出可以看到
  5. 占用 8000 的正是你之前启动的 octane 进程
  6. Octane 的 Worker 进程未能正确初始化,导致处理请求的核心对象是空的,而这个异常又被外层的登录或安全拦截机制捕获,显示成了登录页
  7. Fresns 社区中用于解决 502 Bad Gateway 错误
  8. 说明日志系统在记录 Guzzle 废弃警告时崩溃了,掩盖了真正的问题

报错很明确:8000 端口已被占用。先排查是谁占用了,再决定是杀掉还是换端口。

报错很明确:8000 端口已被占用。先排查是谁占用了,再决定是杀掉还是换端口。

1. 查看谁占用 8000 端口

# 方法一:ss(推荐)
ss -lntp | grep :8000

# 方法二:lsof
lsof -i :8000

# 方法三:fuser
fuser -v 8000/tcp

你大概率会看到是之前没关干净的 octane / swoole 进程,或者宝塔面板里某个服务占用了 8000。

2. 如果是残留的 octane 进程,直接清理

# 查看所有 octane 相关进程
ps aux | grep -E 'octane|swoole' | grep -v grep

# 全部杀掉
pkill -f 'octane:start'
pkill -f 'swoole'

# 再确认 8000 是否释放
ss -lntp | grep :8000

如果还有残留,用 kill -9 <PID> 强杀:

kill -9 $(lsof -t -i:8000)

3. 如果是宝塔或其他服务占用 8000

宝塔默认有些服务会占用 8000(比如某些面板插件、phpMyAdmin 等)。确认后有两个选择:

选择 A:换 Octane 端口(推荐,避免影响其他服务)

php artisan octane:start --server=swoole --host=127.0.0.1 --port=8001 --workers=2 --task-workers=1 --max-requests=500

然后宝塔反向代理指向 127.0.0.1:8001。

选择 B:停掉占用 8000 的服务(如果确认那个服务不需要)

# 先看是什么服务
ss -lntp | grep :8000
# 再根据服务名停掉,比如
systemctl stop xxx

4. 关于那几行 PHP Warning

Cannot load Zend OPcache - it was already loaded
Module "zip" is already loaded
Module "mbstring" is already loaded

这些是 PHP 配置文件里模块重复加载导致的,不影响运行,但建议清理。通常是 /www/server/php/你的版本/etc/php.ini 或 conf.d 目录下重复写了 extension=xxx。可以去宝塔 → 软件商店 → PHP → 配置修改里检查,把重复的 extension 行删掉。

5. 建议:用宝塔守护进程方式启动

手动 php artisan octane:start 一关终端就停了,生产环境建议用 supervisor 守护:

宝塔 → 软件商店 → 安装「Supervisor 管理器」→ 添加守护进程:

项值
名称fresns-octane
运行目录/www/wwwroot/www.madama.cn/fresns
启动命令php artisan octane:start --server=swoole --host=127.0.0.1 --port=8001 --workers=2 --task-workers=1 --max-requests=500
进程数量1
自动重启是

然后宝塔网站 → www.madama.cn → 反向代理 → 目标 http://127.0.0.1:8001。

快速操作顺序

# 1. 看谁占 8000
ss -lntp | grep :8000

# 2. 如果是残留 octane,杀掉
pkill -f 'octane:start'

# 3. 确认端口释放
ss -lntp | grep :8000

# 4. 用 8001 端口启动(避开冲突)
php artisan octane:start --server=swoole --host=127.0.0.1 --port=8001 --workers=2 --task-workers=1 --max-requests=500

先把 ss -lntp | grep :8000 的输出发我,我可以帮你判断具体是哪个服务占用的。

作者:王壹杰
时间:2026-10-02 11:28:14
来源:https://fresns.ciilii.com/