pm2 had too many unstable restarts(16). stopped. “errored”

개발 과정에서 기존에 사용하던 코드를 사용하기 위해서 코드를 가져와 실행시키는 과정에서 에러가 발생했다. pm2라는 node 프로세스 매니저를 활용하는 과정에서 발생한 문제이다.

우선 로그를 살펴보았다. 그러나 어떠한 로그도 찍혀있지 않았다

pm2 logs --err

다음으로 홈 디렉토리에 있는 .pm2/logs에서 로그 파일을 전부 열어보았으나 어떠한 로그도 찍혀있지 않았다.

그러던중 .pm2/pm2.log를 열어보니 다음과 같은 로그가 찍혀있었다.

app.js had too many unstable restarts (16). Stopped. "errored"

구글링에서는 2가지 이유가 있다고 했다.

  1. 서버 측면의 js파일의 endpoint를 잘못 지정한 경우
  2. node의 모듈이 오래되거나 나쁜 버전의 라이브러리가 설치된 경우

그러나 해당 문제로는 해결이 되지 않았다. js 파일 설정과 관련된 파일을 전부 열어보았다. package.json을 열어보던중 scripts 부분에서 start node ./bin/www 실행시키는 것을 찾았고 해당 명령어를 실행시키니 다음과 같은 에러를 찾을수 있었다. 즉 ssl 인증 설정과 같은 파일이 찾을수 없기에 발생한 문제였다.

```
Error: ENOENT: no such file or directory, open '/etc/letsencrypt/live/fullchain.pem' at Object.openSync (node:fs:603:3) at Object.readFileSync (node:fs:471:35) at Object. (/app.js:15:12) at Module._compile (node:internal/modules/cjs/loader:1256:14) at Module._extensions..js (node:internal/modules/cjs/loader:1310:10) at Module.load (node:internal/modules/cjs/loader:1119:32) at Module._load (node:internal/modules/cjs/loader:960:12) at Module.require (node:internal/modules/cjs/loader:1143:19) at require (node:internal/modules/cjs/helpers:119:18) at Object./ bin/www:7:11) { errno: -2, syscall: 'open', code: 'ENOENT', path: '/etc/letsencrypt/live/fullchain.pem' }
```

ssl 인증서를 적용하고 있는 .js 파일을 찾아 정상적으로 경로를 주입함으로서 해당 문제를 해결했다.

https://www.inflearn.com/questions/1052270/pm2-status-에러
https://holystory-dev.com/173