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

使用pm2配合WSL2部署时报错:未知选项--update-env

问题根因

这个问题和PM2本身无直接关联,核心由两个原因导致:

  1. 命令解析规则差异:WSL2默认使用的Bash shell与Windows Powershell对SSH命令的参数解析规则不同,Powershell中单引号包裹的字符串会原封不动传递给远程服务器,而Bash下如果存在引号转义、特殊字符解析问题,会导致PM2的--update-env参数被异常截断或转义,触发报错。另外如果你的脚本里SSH端口使用了省略-p的简写格式(比如-22),WSL自带的OpenSSH不支持该简写,也会导致后续命令参数解析异常。
  2. 远程环境变量加载差异:非交互式SSH会话(即直接通过SSH传递命令执行的方式)默认不会加载远程用户的完整环境变量,若远程服务器存在多个PM2版本,非交互式会话可能调用到v2.5以下的低版本PM2(该版本区间不支持--update-env参数),就会抛出未知选项错误,Powershell发起的SSH会话默认携带的环境变量更多,因此能调用到正确版本的PM2。

解决方案

方案1:调整远程命令传递方式(最推荐)

使用Here文档的方式传递远程命令,完全规避参数解析异常问题,修改后脚本内容如下:

ssh -t <name> -p <port> << EOF
cd <foldername>
git pull
yarn build <appname>
pm2 restart <appname> --update-env
EOF

方案2:显式指定PM2绝对路径

如果是远程环境变量加载问题导致调用到低版本PM2,可手动指定正确的PM2路径:

  1. 手动SSH登录远程服务器,执行which pm2获取PM2的绝对路径,示例返回结果为/home/user/.nvm/versions/node/v14.19.0/bin/pm2
  2. 将脚本中的PM2命令替换为绝对路径:
ssh -t <name> -p <port> 'cd <foldername>; git pull; yarn build <appname>; /home/user/.nvm/versions/node/v14.19.0/bin/pm2 restart <appname> --update-env'

方案3:兼容参数写法

如果不想调整脚本结构,也可以将--update-env替换为PM2兼容的短参数写法,规避部分解析异常:

ssh -t <name> -p <port> 'cd <foldername>; git pull; yarn build <appname>; pm2 restart <appname> --u'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:15:03