打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
pm2部署遇到process.cwd报错的解决方法 | 听雨~昨夜卧听风吹雨,不若相忘于江湖。

最近在pm2.log中看见如下错误导致无法启动服务:

  1. path.js:1144
  2. cwd = process.cwd();
  3. ^
  4.  
  5. Error: ENOENT: no such file or directory, uv_cwd
  6. at Error (native)
  7. at Object.resolve (path.js:1144:25)
  8. at Function.Module._resolveLookupPaths (module.js:361:17)
  9. at Function.Module._resolveFilename (module.js:431:31)
  10. at Function.Module._load (module.js:388:25)
  11. at Module.require (module.js:468:17)
  12. at require (internal/module.js:20:19)
  13. at Object. (/usr/lib/node_modules/pm2/lib/ProcessContainer.js:12:15)
  14. at Module._compile (module.js:541:32)
  15. at Object.Module._extensions..js (module.js:550:10)

于是google之,在https://github.com/Unitech/pm2/issues/2057找到方法解决,记录如下:

首先导致这个错误是因为pm2最早启动的目录被删除了(删除后重建同名目录也是无用的)。

什么叫最早启动的目录呢?就是在命令行下第一次执行pm2时所在的目录,比如新装系统,在 /home/deploy 下第一次执行 pm2命令,那么 /home/deploy 就是最早启动的目录。再比如杀掉pm2进程后,再次在某个目录下执行了pm2命令,那这个目录也是最早启动的目录。

理解了最早启动的目录,那么当pm2启动后,把该目录删除过一次,则再次用pm2去启动node服务时就会报以上错误。

pm2 issues-2057中也有人指出了验证方法,如下:

  1. 先找到pm2的进程pid:
    1. ps ax | grep PM2
  2. 然后查询该进程执行时所在的目录(用上一步得到的pid替换下面命令的PM2_PID)
    1. ls -l /proc/PM2_PID/cwd
  3. 最后根据结果,如下的(deleted)标注,就说明该目录被删除过。
    1. $ ls -l /proc/24016/cwd
    2. lrwxrwxrwx 1 root root 0 Feb 4 17:04 /proc/24016/cwd -> /home/nodejs/deploy(deleted)

验证原因后,解决方法就是重新在另外一个安全一些的目录重启pm2进程。

先用pm2 kill命令杀掉pm2进程,然后 cd ~ 到home目录,执行 pm2 -v 命令,这样就在一个相对安全的目录启动了pm2。最后再去部署node服务就可以了。

http://cssor.com/pm2-deploy-process-cwd-error.html

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
关于Node中Path路径的学习笔记
linux软件安装在哪个目录
卸載 (unmount)/退出檔案系統
windows下node.js调用bat
NodeJS打包可执行文件工具Pkg使用心得。
内核模块遍历进程--内核PS - ldd学习笔记 - ubuntuer zone
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服