서문
터미널에서 직접 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. 모범 사례 권장사항
- 개인 프로젝트 또는 개발 환경: PM2 사용, 설정이 간단하고 기능이 풍부합니다
- 프로덕션 서버: Systemd 사용, 보안 강화 옵션이 더 다양합니다
- 두 가지 결합: Systemd로 PM2 자체를 관리하여 양쪽의 장점을 모두 활용합니다
- 반드시 로그 로테이션을 설정하세요: 로그 파일이 디스크를 가득 채우는 것을 방지합니다
- 합리적인 재시작 제한 설정: 무한 루프 재시작으로 리소스가 소모되는 것을 방지합니다
- 모니터링과 함께 사용: 본 사이트의 "OpenClaw 서비스 모니터링 및 알림 설정 튜토리얼"을 참조하여 모니터링을 구축하세요
프로세스 관리를 설정하면 OpenClaw 서비스는 엔터프라이즈급 운영 안정성을 갖추게 되어 더 이상 예기치 않은 중단을 걱정할 필요가 없습니다.