通过PHP shell_exec运行Node脚本,登出后无法正常执行
解决方法
使用node绝对路径执行
先通过SSH执行which node获取node的绝对路径(例如/usr/local/bin/node),将代码修改为:shell_exec('nohup /usr/local/bin/node script.tjs > /dev/null 2>&1 &')原因是SSH登出后系统PATH环境变量可能发生变化,导致找不到node命令。
改用setsid脱离终端会话
setsid能让进程脱离当前终端,不受SSH登出影响,调整命令为:shell_exec('setsid /usr/local/bin/node script.tjs > /dev/null 2>&1 &')检查supervisor配置
确认supervisor配置文件中,PHP进程的environment项包含必要的PATH参数,或者直接在配置里指定node的绝对路径;同时设置directory为script.tjs所在的目录,避免相对路径引发的问题。替换shell_exec为pcntl扩展创建子进程(可选)
如果上述方法无效,可以尝试用PHP的pcntl扩展创建更稳定的子进程,示例代码:$pid = pcntl_fork(); if ($pid == -1) { die('进程创建失败'); } elseif ($pid == 0) { // 子进程执行node脚本 exec('/usr/local/bin/node script.tjs > /dev/null 2>&1'); exit(0); }注意需要确保PHP环境已安装pcntl扩展。
内容的提问来源于stack exchange,提问作者Jacobson
相关产品推荐
相关产品推荐

