执行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配置文件管理进程,参数更清晰,也方便后续维护:
- 在
/var/www/ghost目录下创建ecosystem.config.js文件,内容如下:
module.exports = { apps: [{ name: 'ghost', script: './index.js', cwd: '/var/www/ghost', env: { NODE_ENV: 'production' }, user: 'ghost' // 这里指定运行的用户 }] };
- 把
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




