问题请教:start -d 执行后,不可关闭ssh终端窗口,否则网站502

banro512

nginx 反代 到 8787 端口

在xshell中,进入程序根目录下

执行 php start.php start 调试正常

执行 php start.php start -d ,如果不关闭当前ssh终端,也是正常

如果一旦关闭了当前 ssh终端窗口,网站就是 502,而另开一个ssh终端,执行 php start.php status 显示进程都在,

php版本
截图

截图
此时正常网站, 关闭当前ssh窗口后,刷新网页502
截图
另开一个ssh终端, 执行 php start.php status,看起来似乎无错
截图

nginx配置

  location / {
    error_page 403 = @webman;
    error_page 404 = @webman;
    error_page 405 = @webman;
    try_files ${uri} ${uri}/  ${uri}/index.html @webman;
  }
  ## WEBMAN LOCATION
  location @webman {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_pass http://127.0.0.1:8787;
  }

====
已解决

在 502时,runtime下error.log 没有产生错误或异常日志,只有 master.log 里提示 进程退出 exit with status 65280

目前问题解决了。 方法是:删掉控制器中所有 echo 和 print_r 输出,就可以了。
具体为什么不知道,总之反复测试发现,删掉这些输出就正常,加上后daemon模式就502。

lsof -np 28010
截图

384 3 0
3个回答

liziyu

是用root用户操作的吗?

  • banro512 27天前

    是的。初步判断貌似和 afterAction(Request $request, $response) 有关,我删掉了 afterAction 方法就可以了,但只要加上,即使 afterAction 函数体为空也不行

  • nitron 27天前

    Exception里打个log,.没有log谁都帮不了你

  • banro512 27天前

    在 502时,runtime下error.log 没有产生错误或异常日志,只有 master.log 里提示 进程退出 exit with status 65280

    目前问题解决了。 删掉了 方法里所有的 echo 和 print_r 输出,就可以了。具体因为什么不知道,总之删掉这些输出就正常,加上就502

walkor

可能你使用的PHP版本有问题,比如使用了dev版本。运行php -v 贴下结果,贴全

  • banro512 27天前

    PHP 8.1.7 (cli) (built: Jun 10 2022 12:03:08) (NTS)
    Copyright (c) The PHP Group
    Zend Engine v4.1.7, Copyright (c) Zend Technologies

    截图已贴

  • walkor 27天前

    执行lsof -np 22696(22696是php start.php status里看到的一个子进程的pid),执行lsof -np 22696截图下后半部分

  • banro512 27天前

    lsof -np 28010
    截图在正文底部

  • walkor 27天前

    看样子是标准输出没有重定向成功,之前遇到过1-2个用户反馈这样的案例,换个php版本就好了。或者代码里不打印数据也行

  • banro512 27天前

    原来如此,多谢☺

walkor

目前看php 8.0.20 php8.1.7 php8.1.8有bug,无法重定向标准输出。
workerman4.0.41 版本做了兼容,执行命令更新 composer require workerman/workerman ^4.0.41

🔝