경로에 bylinux-core 가 두 번 들어가 있는 게 원인입니다: .../work/web/bylinux-core/bylinux-core/dist/server.js ← 이걸 찾는데 ^^^^^^^^^^^^ 중첩 전에 tarball 안에 낡은 중첩 폴더 bylinux-core/bylinux-core/ 가 섞여 있다고 말씀드렸는데, tarball을 풀 때 그 중첩이 서버에 생겼거나, pm2가 잘못된 cwd /경로로 등록된 겁니다. pm2가 .../bylinux-core/bylinux-core/dist/server.js 를 찾다가 없어서 MODULE_NOT_FOUND 가 난 거고요. 먼저 진짜 파일이 어디 있는지 확인하세요: sh cd ~/work/web/bylinux-core # 올바른 위치에 dist/server.js 가 있나 ls -la dist/server.js && echo "정상 위치 OK" # 중첩 폴더가 실제로 있나 ls -la bylinux-core/ 2>/dev/null && echo ">> 중첩 폴더 존재(문제)" || echo "중첩 없음" # pm2 가 어떤 경로/cwd 로 등록돼 있나 pm2 info bylinux-core | grep -iE "script path|exec cwd|script|pm2 home" cat ecosystem.config.js 2>/dev/null 두 경우로 갈립니다: 경우 A — dist/server.js 는 올바른 위치( ~/work/web/bylinux-core/dist/ )에 있는데 pm2 등록만 잘못된 경우 (가장 흔함): pm2를 지우고 올바른 위치에서 다시 등록하면 됩니다. sh cd ~/work/web/bylinux-core pm2 delete bylinux-core pm2 start ecosystem.config.js # ecosystem 이 이 폴더 기준이면 정상 경로로 등록됨 # ecosystem 이 없거나 계속 꼬이면 직접: # pm2 start dist/server.js --name bylinux-core pm2 save 경우 B — tarball을 풀 때 중첩이 생겨서 실제로 ~/work/web/bylinux-core/bylinux-core/ 에 프로젝트가 들어간 경우: 이건 tarball을 --strip-components=1 없이 풀었을 때 생깁니다. 정리: sh cd ~/work/web/bylinux-core # 중첩 폴더 안에 진짜 프로젝트가 있으면, 내용을 상위로 끌어올림 ls bylinux-core/dist/server.js 2>/dev/null && echo "중첩 안에 프로젝트 있음" # 필요시 중첩 내용을 상위로 이동 (백업 후) # mv bylinux-core/* bylinux-core/.* . 2>/dev/null ; rmdir bylinux-core 핵심 확인 한 줄: ecosystem.config.js 에 cwd 나 script 경로가 어떻게 돼 있는지가 원인을 결정합니다. 보통 이렇게 돼 있어야 정상입니다: js module.exports = { apps: [{ name: 'bylinux-core', script: 'dist/server.js', // 또는 './dist/server.js' cwd: '/home/sysadmin/work/web/bylinux-core', // 중첩 없이 한 번만 // ... }] }; 여기 cwd 나 script 에 bylinux-core/bylinux-core 처럼 중첩이 들어가 있으면 그걸 한 번으로 고치면 끝입니다. 추천 순서: sh cd ~/work/web/bylinux-core ls -la dist/server.js # 여기 있으면 경우 A pm2 delete bylinux-core pm2 start dist/server.js --name bylinux-core # 현재 폴더 기준으로 확실하게 등록 pm2 logs bylinux-core --lines 20 # 정상 기동 확인 pm2 save 위 ls -la dist/server.js 와 cat ecosystem.config.js 결과 주시면, 경우 A인지 B인지 확정해서 정확한 한 줄로 정리해 드리겠습니다. 제 짐작엔 dist는 올바른 위치에 있고 pm2 등록 경로만 중첩 된 경우 A라, pm2 delete 후 현재 폴더에서 재등록하면 바로 해결될 겁니다.