PM2 ERROR no such file or directory, uv_cwd

问题:使用PM2 cluster模式启动多个进程时候报错

1
2
3
4
5
6
7
8
9
10
11
PM2: Error: ENOENT: no such file or directory, uv_cwd
PM2: at Error (native)
PM2: at Object.posix.resolve (path.js:422:50)
PM2: at Function.Module._resolveLookupPaths (module.js:248:17)
PM2: at Function.Module._resolveFilename (module.js:326:31)
PM2: at Function.Module._load (module.js:286:25)
PM2: at Module.require (module.js:365:17)
PM2: at require (module.js:384:17)
PM2: at Object.<anonymous> (/usr/local/bin/node_modules/pm2/lib/ProcessContainer.js:12:15)
PM2: at Module._compile (module.js:434:26)
PM2: at Object.Module._extensions..js (module.js:452:10)

解决方法:

  1. 查看PM2的进程ID,ps ax | grep PM2

    1
    2
    ps ax | grep PM2
    83178 ? Ssl 41 : 19 PM2 v2 .7 .1: God Daemon(/root/.pm2)

    第一列的83178即为PM2进程的PID

  2. 确认一下进程所指向的路径是否正确,ls -l /proc/{PM2_PID}/cwd

    1
    2
    $ sudo ls -l /proc/83178/cwd
    lrwxrwxrwx 1 root root 0 530 22:10 /proc/83178/cwd -> /WWW/App/web

    如果这个路径是被删除了的,PM2进程仍然使用了删除的路径,就会报上面的错误。

  3. 如果不正确,重启一下:pm2 kill

    1
    pm2 kill
  4. 重启成功后,再次使用pm2 启动新的进程

补充

linux 内核提供了一种/proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存中,而不占用硬盘空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

/proc/{pid}/cwd: 指向进程当前工作目录的软链。