PM2가 관리하던 프로세스 리스트(등록 정보)는 PM2의 “덤프 파일”이나 “저장된 상태”에 기반해서 복원(resurrect)되는데, 이 데이터가 사라졌다면 로그 파일을 뒤져서 최소한 어떤 앱을 띄웠었는지 단서를 얻을 수는 있습니다. 아래 순서대로 확인해 보세요.
1. 덤프 파일(dump file)‑기반 복원 시도
PM2는 pm2 save
명령을 쓰면 ~/.pm2/dump.pm2
라는 JSON 파일에 현재 프로세스 정보를 저장합니다.
ls -l ~/.pm2/dump.pm2
cat ~/.pm2/dump.pm2 | jq .
– 파일이 남아 있다면, pm2 resurrect
명령으로 바로 복원할 수 있습니다.
pm2 resurrect
2. PM2 자체 로그 확인
덤프 파일이 없다면, PM2 런타임 로그(~/.pm2/pm2.log
)를 열어 “프로세스 시작 시점” 로그를 찾아봅니다.
grep -E "Launching|Starting app" ~/.pm2/pm2.log
여기엔 다음과 같은 형식의 메시지가 남아 있습니다.
PM2 | App [my-app:0] starting in -fork mode-
PM2 | App [my-app:0] online
– my-app
은 PM2에 등록된 앱 이름
– 로그 바로 앞뒤로 스크립트 경로나 인수(args) 정보도 같이 기록되어 있을 수 있습니다.
3. 각 앱의 출력 로그 파헤치기
PM2는 앱별로 ~/.pm2/logs/{앱이름}-out.log
와 {앱이름}-error.log
를 남깁니다.
ls ~/.pm2/logs/
tail -n 30 ~/.pm2/logs/my-app-out.log
– 앱이 구동될 때 자기 자신(예: Express 서버)이 시작 로그를 찍었다면, 로그 헤더에서 어떤 포트를 열었는지, 어떤 환경변수를 썼는지 단서를 얻을 수 있습니다.
4. 시스템 서비스 로그 확인 (systemd)
만약 pm2 startup
→ systemctl enable pm2-$(whoami)
형태로 PM2를 서비스로 등록했다면, systemd 저널에도 명령 인자가 남아 있을 수 있습니다.
journalctl -u pm2-$(whoami).service --since "1 day ago"
– 여기에 ExecStart=/home/ubuntu/.nvm/versions/node/... pm2 resurrect
혹은 pm2 start /path/to/app.js --name "my-app"
같은 라인이 있을 수 있습니다.
결론
- 덤프 파일(
~/.pm2/dump.pm2
)이 남아 있으면 pm2 resurrect
로 즉시 복원
- 없다면 PM2 런타임 로그(
~/.pm2/pm2.log
)에서 “앱 이름”, “스크립트 경로”, “인자” 등을 추출
- 앱별 out/error 로그와 systemd 저널도 부가 단서로 활용
이렇게 로그들을 종합해 보면, 예전에 어떤 앱을 어떤 옵션으로 PM2에 등록했는지 대략 복원할 수 있으며, 복원 후엔 pm2 save
로 덤프를 다시 만들어 두시면 다음번에 잃어버릴 위험을 줄일 수 있습니다.