You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

共享主机部署Laravel 8无sudo权限时Supervisor的替代方案咨询

共享主机无sudo权限下替代Supervisor管理Laravel WebSockets的方案

可行替代方案

  • 方案1:Laravel 调度器兜底保活

    共享主机普遍支持自定义Cron任务,你可以借助Laravel自带的调度器实现进程状态检查和自动重启:

    1. 确认Laravel调度器的Cron规则已经配置到主机面板,对应规则为:
      * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
    2. 在app/Console/Kernel.php的schedule方法中添加进程检测逻辑:
    $schedule->call(function () {
        $process = \Symfony\Component\Process\Process::fromShellCommandline('pgrep -f "websocket:serve"');
        $process->run();
        if (!$process->isSuccessful()) {
            \Symfony\Component\Process\Process::fromShellCommandline('nohup php ' . base_path('artisan') . ' websocket:serve --host=127.0.0.1 --port=6001 > /dev/null 2>&1 &')->run();
        }
    })->everyMinute();
    

    该方案无需额外安装依赖,仅需复用现有调度能力,缺点是进程异常退出后最多等待1分钟才会重启,适合低要求场景。

  • 方案2:独立Shell监控脚本+Cron执行

    如果你不想依赖Laravel调度器,可以单独编写Shell监控脚本,直接通过Cron执行:

    1. 在用户目录新建monitor_websocket.sh文件,内容如下:
    #!/bin/bash
    if ! pgrep -f "websocket:serve" > /dev/null
    then
      cd /path/to/your/laravel/root
      nohup php artisan websocket:serve --host=127.0.0.1 --port=6001 > /dev/null 2>&1 &
    fi
    
    1. 给脚本添加执行权限:
      chmod +x ~/monitor_websocket.sh
    2. 在主机Cron面板添加每分钟执行的规则:
      * * * * * /bin/bash ~/monitor_websocket.sh
  • 方案3:用户级安装PM2实现进程管理

    大部分共享主机默认预装Node.js环境,你可以在无sudo权限的情况下用户级安装PM2,功能接近Supervisor,支持进程异常秒级重启:

    1. 执行用户级PM2安装命令:
      npm install pm2 -g --prefix ~/.npm-global
    2. 编辑~/.bashrc文件添加环境变量:
      export PATH=~/.npm-global/bin:$PATH
    3. 执行source ~/.bashrc让配置生效
    4. 在Laravel根目录新建PM2配置文件ecosystem.config.js:
    module.exports = {
      apps: [{
        name: "laravel-websockets",
        script: "artisan",
        args: "websocket:serve --host=127.0.0.1 --port=6001",
        interpreter: "php",
        instances: 1,
        autorestart: true,
        watch: false,
        max_memory_restart: "100M",
      }]
    }
    
    1. 启动进程:pm2 start ecosystem.config.js
      执行pm2 startup可以生成对应Cron规则,配置开机后自动启动PM2管理的进程。

注意事项

  • 先确认共享主机允许长期运行自定义后台进程,部分厂商会自动杀掉长时间运行的非Web进程,遇到这种情况可以在监控逻辑中添加每24小时主动重启进程的规则,避免被系统回收。
  • WebSocket端口要选择1024以上的非特权端口,不要使用80、443等需要root权限的端口,否则启动会报错。
  • 如果需要对外暴露WebSocket服务,需要在主机面板配置反向代理,把指定路径的请求转发到本地WebSocket端口。

内容的提问来源于stack exchange,提问作者Adil Bashir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:06:03