此文章来源: ju.outofmemory.cn/entry/30032… github.com/Unitech/pm2…前端
公司运维清理机器磁盘,将项目部署的代码暴力的全删了。这个时候每一个前端项目都须要从新部署,当部署node服务时,发现启动失败。node
pm2 list
pm2 logs
复制代码
发现node服务重启失败,报错日志以下:git
path.js:1144
cwd = process.cwd();
^
Error: ENOENT: no such file or directory, uv_cwd
at Error (native)
at Object.resolve (path.js:1144:25)
at Function.Module._resolveLookupPaths (module.js:361:17)
at Function.Module._resolveFilename (module.js:431:31)
at Function.Module._load (module.js:388:25)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object. (/usr/lib/node_modules/pm2/lib/ProcessContainer.js:12:15)
at Module._compile (module.js:541:32)
复制代码
网上查资料,发现这个报错的缘由是pm2的启动目录被删除了(删除后重建同名目录也是无效的)。github
什么叫最先启动的目录呢?就是在命令行下第一次执行pm2时所在的目录,好比新装系统,在 /home/deploy 下第一次执行 pm2命令,那么 /home/deploy 就是最先启动的目录。bash
再好比杀掉 pm2 进程后,再次在某个目录下执行了 pm2 命令,那这个目录也是最先启动的目录。markdown
pm2 issues-2057中也有人指出了验证方法,以下:运维
ps ax | grep PM2
复制代码
ls -l /proc/PM2_PID/cwd 复制代码
$ ls -l /proc/24016/cwd lrwxrwxrwx 1 root root 0 Feb 4 17:04 /proc/24016/cwd -> /home/nodejs/deploy(deleted) 复制代码
上面显示的目录已经被删除过。oop
pm2 kill 复制代码
cd ~ 到home目录,执行 pm2 -v 命令ui
cd ~ pm2 -v 复制代码