You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

执行git push web后遇pm2: unknown option `--run-as-user'错误求助

解决pm2 --run-as-user 未知选项错误

嘿,这个问题我熟!你遇到的pm2: unknown option '--run-as-user'报错,是因为这个命令行选项在新版pm2里已经被废弃掉了,现在得用新的方式指定运行用户才行。

先看你的hooks/post-receive脚本里的问题行:

pm2 start index.js --run-as-user ghost --name ghost

这行里的--run-as-user就是罪魁祸首,现在pm2不认这个参数了。给你两个靠谱的解决方案:

方案一:修改pm2启动命令(快速解决)

把原来的启动命令替换成以下两种方式之一:

方式A:用su切换用户执行

通过su命令切换到ghost用户后再启动pm2,确保进程以目标用户身份运行:

su - ghost -c "cd /var/www/ghost && pm2 start index.js --name ghost"

方式B:使用pm2原生--user参数(部分版本支持)

部分新版pm2用--user替代了旧的--run-as-user,可以直接试试:

pm2 start index.js --user ghost --name ghost

如果执行不报错,这种方式更简洁。

方案二:用pm2生态配置文件(更规范)

推荐用pm2的ecosystem.config.js配置文件管理进程,参数更清晰,也方便后续维护:

  1. /var/www/ghost目录下创建ecosystem.config.js文件,内容如下:
module.exports = {
  apps: [{
    name: 'ghost',
    script: './index.js',
    cwd: '/var/www/ghost',
    env: {
      NODE_ENV: 'production'
    },
    user: 'ghost' // 这里指定运行的用户
  }]
};
  1. post-receive脚本里的pm2启动行改成:
pm2 start ecosystem.config.js

另外,脚本里的pm2 kill会杀掉所有pm2进程,如果服务器上还有其他pm2管理的服务,建议改成pm2 delete ghost只删除ghost进程,避免影响其他服务:

pm2 delete ghost || true # 即使进程不存在也不报错

最后调整后的完整post-receive脚本示例:

#!/bin/sh
export NODE_ENV=production
GIT_WORK_TREE=/var/www/ghost git checkout -f
cd /var/www/ghost
pm2 delete ghost || true
npm install --production
chown -R ghost:ghost /var/www/ghost
su - ghost -c "cd /var/www/ghost && pm2 start index.js --name ghost"
# 或者用配置文件的话就替换成:pm2 start ecosystem.config.js

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

火山引擎 最新活动