튜토리얼 카테고리 Skills 소개
ZH EN JA KO
보안 운영

PM2와 Systemd를 이용한 OpenClaw 프로세스 관리 튜토리얼

· 14 분 소요

서문

터미널에서 직접 openclaw up을 실행하면 치명적인 문제가 있습니다. 터미널을 닫거나 SSH 연결이 끊기면 서비스가 중지됩니다. 본 글에서는 프로덕션 수준의 프로세스 관리 방안인 PM2와 Systemd를 소개하여 OpenClaw를 서버에서 안정적으로 운영할 수 있도록 도와드리겠습니다.

1. PM2 방안 (권장)

PM2는 Node.js 생태계에서 가장 인기 있는 프로세스 관리자로, OpenClaw와 자연스럽게 호환됩니다.

1.1 PM2 설치

# PM2 전역 설치
npm install -g pm2

# 설치 확인
pm2 --version

1.2 OpenClaw 빠른 시작

# PM2로 OpenClaw 시작
pm2 start openclaw -- up

# 실행 상태 확인
pm2 status

출력 예시:

┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┐
│ id  │ name     │ namespace   │ mode    │ status  │ cpu      │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┤
│ 0   │ openclaw │ default     │ fork    │ online  │ 0.3%     │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┘

1.3 Ecosystem 설정 파일 사용

프로덕션 환경에서는 PM2의 ecosystem 설정 파일을 사용하여 세밀한 관리를 권장합니다:

# 설정 파일 생성
nano ~/openclaw-ecosystem.config.js
// ~/openclaw-ecosystem.config.js
module.exports = {
  apps: [
    {
      name: "openclaw",
      script: "openclaw",
      args: "up",
      cwd: process.env.HOME,

      // 재시작 정책
      autorestart: true,
      max_restarts: 10,
      min_uptime: "30s",
      restart_delay: 5000,

      // 리소스 제한
      max_memory_restart: "512M",

      // 환경 변수
      env: {
        NODE_ENV: "production",
        NODE_OPTIONS: "--max-old-space-size=512"
      },

      // 로그 설정
      log_file: "/var/log/openclaw/combined.log",
      out_file: "/var/log/openclaw/out.log",
      error_file: "/var/log/openclaw/error.log",
      log_date_format: "YYYY-MM-DD HH:mm:ss Z",
      merge_logs: true,

      // 파일 변경 감지 시 자동 재시작 (개발 환경에서 사용)
      watch: false,

      // 정상 종료
      kill_timeout: 10000,
      listen_timeout: 15000
    }
  ]
};
# 로그 디렉토리 생성
sudo mkdir -p /var/log/openclaw
sudo chown $USER:$USER /var/log/openclaw

# ecosystem 파일로 시작
pm2 start ~/openclaw-ecosystem.config.js

# 상태 확인
pm2 status

1.4 부팅 시 자동 시작 설정

PM2의 가장 강력한 기능 중 하나로, 한 줄 명령으로 부팅 시 자동 시작을 구현합니다:

# 부팅 시 자동 시작 스크립트 생성 (시스템에 맞게 systemd/upstart/launchd 자동 선택)
pm2 startup

# 시스템이 sudo로 실행해야 할 명령을 출력합니다. 복사하여 실행하세요
# 예시:
# sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u your_user --hp /home/your_user

# 현재 프로세스 목록 저장
pm2 save

중요 안내: PM2가 관리하는 프로세스를 변경(추가, 삭제, 재시작)할 때마다 pm2 save를 실행하여 저장된 프로세스 목록을 업데이트해야 합니다.

1.5 자주 사용하는 PM2 관리 명령어

명령어 기능
pm2 status 모든 프로세스 상태 확인
pm2 logs openclaw 실시간 로그 확인
pm2 logs openclaw --lines 100 최근 100줄 로그 확인
pm2 restart openclaw 서비스 재시작
pm2 stop openclaw 서비스 중지
pm2 delete openclaw 프로세스 삭제
pm2 reload openclaw 무중단 리로드
pm2 monit 실시간 모니터링 패널 진입
pm2 describe openclaw 프로세스 상세 정보 확인
pm2 env 0 프로세스 환경 변수 확인

1.6 PM2 실시간 모니터링 패널

# 대화형 모니터링 패널 시작
pm2 monit

이 패널은 다음 정보를 실시간으로 표시합니다:

  • CPU 및 메모리 사용률
  • 실시간 로그 스크롤
  • 프로세스 메타데이터 (PID, 실행 시간, 재시작 횟수)
  • 커스텀 메트릭

1.7 PM2 로그 관리

장기간 실행 후 로그 파일이 커질 수 있습니다. pm2-logrotate 모듈로 자동 로테이션을 설정합니다:

# 로그 로테이션 모듈 설치
pm2 install pm2-logrotate

# 로테이션 매개변수 설정
pm2 set pm2-logrotate:max_size 50M       # 단일 파일 최대 50MB
pm2 set pm2-logrotate:retain 7           # 최근 7개 파일 보존
pm2 set pm2-logrotate:compress true      # 이전 로그 압축
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'  # 매일 로테이션

# 현재 로그 수동 비우기
pm2 flush openclaw

1.8 PM2에서 OpenClaw 업그레이드

OpenClaw 버전을 업그레이드해야 할 때:

# 1. OpenClaw 업그레이드
npm install -g openclaw@latest

# 2. PM2의 프로세스 재시작
pm2 restart openclaw

# 3. 버전 및 상태 확인
pm2 describe openclaw
curl -s http://localhost:18789/health | jq .version

2. Systemd 방안

Linux 네이티브 프로세스 관리 방식을 선호한다면 Systemd가 최선의 선택입니다.

2.1 Systemd 서비스 파일 생성

# openclaw의 설치 경로 찾기
which openclaw
# 보통 /usr/bin/openclaw 또는 /usr/local/bin/openclaw

# 서비스 파일 생성
sudo nano /etc/systemd/system/openclaw.service
[Unit]
Description=OpenClaw AI Assistant Platform
Documentation=https://openclaw.com
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=openclaw
Group=openclaw
WorkingDirectory=/home/openclaw

# 시작 명령
ExecStart=/usr/local/bin/openclaw up
ExecStop=/bin/kill -SIGTERM $MAINPID
ExecReload=/bin/kill -SIGUSR2 $MAINPID

# 환경 변수
Environment=NODE_ENV=production
Environment=NODE_OPTIONS=--max-old-space-size=512

# 재시작 정책
Restart=always
RestartSec=10
StartLimitBurst=5
StartLimitIntervalSec=60

# 리소스 제한
MemoryMax=1G
CPUQuota=80%

# 보안 강화
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/openclaw/.config/openclaw
ReadWritePaths=/home/openclaw/.openclaw
PrivateTmp=true

# 로그
StandardOutput=journal
StandardError=journal
SyslogIdentifier=openclaw

[Install]
WantedBy=multi-user.target

2.2 전용 사용자 생성 (권장)

# 시스템 사용자 생성
sudo useradd -r -m -s /bin/bash openclaw

# 해당 사용자로 전환하여 초기 설정 완료
sudo -u openclaw bash -c "openclaw onboard"

2.3 서비스 활성화 및 관리

# systemd 설정 다시 로드
sudo systemctl daemon-reload

# 부팅 시 자동 시작 활성화
sudo systemctl enable openclaw

# 서비스 시작
sudo systemctl start openclaw

# 상태 확인
sudo systemctl status openclaw

2.4 자주 사용하는 Systemd 관리 명령어

명령어 기능
systemctl start openclaw 서비스 시작
systemctl stop openclaw 서비스 중지
systemctl restart openclaw 서비스 재시작
systemctl status openclaw 상태 확인
systemctl enable openclaw 부팅 시 자동 시작 활성화
systemctl disable openclaw 부팅 시 자동 시작 비활성화
journalctl -u openclaw -f 실시간 로그 확인
journalctl -u openclaw --since "1 hour ago" 최근 1시간 로그 확인
journalctl -u openclaw -p err 오류 로그만 확인

2.5 Systemd 로그 관리

Systemd는 journald를 이용하여 로그를 관리하며, 다음과 같이 로그 크기를 제어할 수 있습니다:

# journald 설정 편집
sudo nano /etc/systemd/journald.conf

# 최대 로그 사용 공간 설정
# SystemMaxUse=500M
# SystemMaxFileSize=50M

# journald 재시작
sudo systemctl restart systemd-journald

# 오래된 로그 수동 정리 (최근 3일 보존)
sudo journalctl --vacuum-time=3d

# 오래된 로그 수동 정리 (총 크기 200MB 제한)
sudo journalctl --vacuum-size=200M

3. PM2 vs Systemd 비교

특성 PM2 Systemd
설치 난이도 간단 (npm install) 설치 불필요 (시스템 내장)
설정 난이도 보통 보통
Node.js 통합 네이티브 지원 수동 설정 필요
모니터링 패널 내장 (pm2 monit) 서드파티 도구 필요
로그 관리 플러그인 필요 journald 네이티브 지원
보안 강화 제한적 풍부한 샌드박스 옵션
리소스 제한 메모리 제한 CPU/메모리/IO 전면 제한
클러스터 모드 지원 직접 지원하지 않음
크로스 플랫폼 Windows/Mac/Linux Linux 전용
적용 시나리오 개발/소규모 프로덕션 프로덕션 환경

4. 충돌 자동 복구 테스트

어떤 방안을 사용하든 충돌 복구 능력을 테스트하는 것을 권장합니다:

# OpenClaw의 PID 가져오기
pgrep -f "openclaw up"

# 프로세스 충돌 시뮬레이션
kill -9 $(pgrep -f "openclaw up")

# 몇 초 후 자동 재시작 여부 확인
sleep 15

# PM2 방안
pm2 status

# Systemd 방안
systemctl status openclaw

5. 모범 사례 권장사항

  1. 개인 프로젝트 또는 개발 환경: PM2 사용, 설정이 간단하고 기능이 풍부합니다
  2. 프로덕션 서버: Systemd 사용, 보안 강화 옵션이 더 다양합니다
  3. 두 가지 결합: Systemd로 PM2 자체를 관리하여 양쪽의 장점을 모두 활용합니다
  4. 반드시 로그 로테이션을 설정하세요: 로그 파일이 디스크를 가득 채우는 것을 방지합니다
  5. 합리적인 재시작 제한 설정: 무한 루프 재시작으로 리소스가 소모되는 것을 방지합니다
  6. 모니터링과 함께 사용: 본 사이트의 "OpenClaw 서비스 모니터링 및 알림 설정 튜토리얼"을 참조하여 모니터링을 구축하세요

프로세스 관리를 설정하면 OpenClaw 서비스는 엔터프라이즈급 운영 안정성을 갖추게 되어 더 이상 예기치 않은 중단을 걱정할 필요가 없습니다.

OpenClaw는 무료 오픈소스 개인 AI 어시스턴트로, WhatsApp, Telegram, Discord 등 다양한 플랫폼을 지원합니다