우분투 서버 부팅시 자동실행 node.js 서버 다중 프로그램 등록

우분투 서버 부팅시 자동실행 node.js 서버 다중 프로그램 등록

우분투 서버에서 nohup을 사용하여 백그라운드에서 Node.js 애플리케이션을 실행하는 것은 간단한 테스트에는 좋지만, 서버 재시작 시 자동 실행이나 앱이 죽었을 때 자동 재시작을 보장하지 못하기 때문에 운영 환경에서는 권장되지 않습니다.

특히 6개의 명령어를 관리해야 한다면, 개별적으로 nohup을 쓰는 것보다 프로세스 매니저를 사용하는 것이 훨씬 효율적입니다.

가장 추천하는 방법부터 순서대로 3가지 해결책을 제시해 드립니다.


방법 1. PM2 사용하기 (가장 추천)

Node.js 애플리케이션 관리에 특화된 PM2를 사용하는 것이 가장 안정적이고 관리가 쉽습니다. 6개의 앱을 한눈에 모니터링할 수 있고, 로그 관리와 자동 재시작이 완벽하게 지원됩니다.

1. PM2 설치

Bash

sudo npm install -g pm2

2. 애플리케이션 실행 (6개 각각 실행)

기존의 nohup npm run dev & 대신 아래와 같이 실행합니다. (최초 1회만 하면 됩니다.)

Bash

# 앱 1 실행 (예시)
cd /path/to/app1
pm2 start npm --name "app1" -- run dev

# 앱 2 실행
cd /path/to/app2
pm2 start npm --name "app2" -- run dev

# ... 나머지 앱들도 동일하게 진행
  • --name "app1": 관리하기 쉽게 이름을 붙여줍니다.

  • -- run dev: npm run dev 명령어를 실행한다는 의미입니다.

3. 현재 실행 목록 저장

현재 실행 중인 6개의 프로세스 리스트를 PM2에 저장합니다.

Bash

pm2 save

4. 부팅 시 자동 실행 등록

서버가 재시작될 때 PM2가 자동으로 실행되도록 설정합니다.

Bash

pm2 startup

주의: 위 명령어를 입력하면 터미널에 “sudo env PATH…” 로 시작하는 명령어가 출력됩니다. 그 명령어를 복사해서 그대로 한 번 더 실행해 주어야 설정이 완료됩니다.


방법 2. PM2 Ecosystem 파일 사용 (관리 효율성 극대화)

6개의 앱을 하나하나 명령어로 치는 것보다, 하나의 설정 파일(ecosystem.config.js)로 관리하는 것이 유지보수에 훨씬 좋습니다.

1. 설정 파일 생성

원하는 디렉토리에서 다음 명령어를 실행합니다.

Bash

pm2 init

2. 파일 수정

생성된 ecosystem.config.js 파일을 열어 6개의 앱 정보를 입력합니다.

JavaScript

module.exports = {
  apps : [{
    name   : "app1",
    script : "npm",
    args   : "run dev",
    cwd    : "/home/ubuntu/project/app1", // 앱1 경로
    env: {
       NODE_ENV: "production",
    }
  }, {
    name   : "app2",
    script : "npm",
    args   : "run dev",
    cwd    : "/home/ubuntu/project/app2", // 앱2 경로
  },
  // ... 나머지 앱들도 이어서 작성
  ]
}

3. 전체 실행 및 저장

Bash

pm2 start ecosystem.config.js
pm2 save
pm2 startup

방법 3. Crontab + Shell Script (전통적인 방식)

PM2를 설치하기 싫고, 굳이 nohup 방식을 고수해야 한다면 crontab@reboot 기능을 사용합니다. 하지만 이 방식은 앱이 중간에 꺼졌을 때 자동으로 켜지지 않습니다.

1. 실행 스크립트 만들기 (start_all.sh)

홈 디렉토리 등에 스크립트 파일을 만듭니다.

Bash

#!/bin/bash

# 환경변수 로드 (필요시)
source /home/ubuntu/.profile

# 앱 1 시작
cd /home/ubuntu/project/app1
nohup npm run dev > app1.log 2>&1 &

# 앱 2 시작
cd /home/ubuntu/project/app2
nohup npm run dev > app2.log 2>&1 &

# ... 6개 반복

2. 실행 권한 부여

Bash

chmod +x /home/ubuntu/start_all.sh

3. Crontab 등록

Bash

crontab -e

파일의 맨 아래에 다음 줄을 추가합니다.

Plaintext

@reboot /home/ubuntu/start_all.sh

요약 및 비교

기능 PM2 (방법 1, 2) Crontab + Nohup (방법 3)
난이도 쉬움 (설치 필요) 보통
자동 실행 지원 지원
자동 재시작 앱 충돌/종료 시 즉시 재시작 불가능 (서버 재부팅 때만 실행됨)
로그 관리 pm2 logs로 통합 관리 파일별로 직접 확인해야 함
관리 편의성 명령어 하나로 6개 제어 가능 스크립트 수정 필요

추천

6개의 Node.js 앱을 운영하신다면 방법 1 (PM2) 또는 방법 2 (PM2 Ecosystem) 를 강력히 추천합니다. 서버 운영 중 프로세스가 죽는 일은 빈번한데, PM2는 이를 알아서 살려주기 때문입니다.

Similar Posts

2 Comments

  1. PM2로 실행 중인 Node.js 애플리케이션의 리스트를 확인하는 방법은 매우 간단합니다. 터미널에서 아래의 명령어들을 상황에 맞게 사용하시면 됩니다.

    1. 기본 리스트 확인 (가장 많이 사용)
    실행 중인 모든 프로세스의 상태를 표(Table) 형태로 깔끔하게 보려면 아래 명령어를 입력하세요.

    Bash

    pm2 list
    (또는 pm2 ls, pm2 status를 입력해도 동일한 결과를 볼 수 있습니다.)

    이 명령어를 실행하면 다음과 같은 주요 정보를 확인할 수 있습니다:

    id: 프로세스의 고유 ID (이 숫자로 중지/재시작 등을 관리합니다)

    name: 애플리케이션 이름

    status: 현재 상태 (online, stopped, errored 등)

    restart: 재시작된 횟수

    uptime: 실행된 시간

    cpu / mem: 현재 CPU 및 메모리 점유율

    2. 실시간 모니터링 (대시보드 형태)
    단순한 리스트뿐만 아니라, 로그와 리소스 사용량을 실시간으로 보고 싶다면 다음 명령어를 추천합니다.

    Bash

    pm2 monit
    이 명령어는 터미널을 대시보드 화면으로 전환하여 각 프로세스의 실시간 로그와 상태를 한눈에 파악할 수 있게 해줍니다.

    3. 특정 프로세스 상세 정보 확인
    리스트에서 확인한 ID나 이름을 사용하여, 특정 프로그램의 더 자세한 정보(파일 경로, 환경 변수 등)를 보고 싶다면 아래 명령어를 사용하세요.

    Bash

    # 예: ID가 0인 프로세스 확인
    pm2 show 0
    제가 도와드릴 수 있는 다음 단계:

    리스트를 확인하신 후, 특정 프로세스를 **재시작(restart)**하거나 **로그(logs)**를 확인하는 방법이 궁금하시다면 알려주세요!

  2. 원인 : 서버가 재부팅 되었는데 `save`를 안 했습니다

    만약 계정 문제가 아니라면, 서버가 재부팅 되었을 가능성이 있습니다. PM2는 명령어로 실행만 시켜두면 **메모리에만 저장**된 상태입니다. 디스크에 저장(`save`)하지 않은 상태에서 서버가 꺼졌다 켜지면 리스트가 초기화됩니다.

    **✅ 해결 방법:**
    혹시 이전에 `pm2 save`를 한 적이 있다면, 죽은 프로세스를 되살리는 명령어를 시도해 볼 수 있습니다.

    “`bash
    pm2 resurrect
    “`

    이래도 리스트가 안 나온다면, 죄송하지만 **최초 1회 실행 명령어(pm2 start …)를 다시 입력하여 6개를 실행**해주셔야 합니다.

    —–

    ### 🔥 [중요] 재발 방지 설정 (꼭 하셔야 합니다)

    프로세스가 다시 실행되어 리스트(`pm2 list`)에 6개가 잘 보인다면, **시스템이 재시작되어도 사라지지 않도록** 다음 두 명령어를 **반드시** 순서대로 실행해주세요.

    **1. 현재 실행 중인 리스트를 저장**

    “`bash
    pm2 save
    “`

    > *이 명령어를 쳐야 “Dumping processes” 메시지가 나오면서 현재 상태가 고정됩니다.*

    **2. 부팅 시 자동 실행 스크립트 등록**

    “`bash
    pm2 startup
    “`

    > **주의:** 이 명령어를 치면 터미널에 **”sudo env PATH=…”** 로 시작하는 복잡한 명령어가 출력됩니다. **그 줄을 복사해서 터미널에 붙여넣고 엔터를 쳐야** 최종 설정이 완료됩니다.

    이 과정을 거치면 서버를 껐다 켜도, `pm2 list`에서 프로세스들이 사라지지 않고 자동으로 실행됩니다.

답글 남기기