맥미니로 OpenClaw를 운영하다 보면 이런 생각이 들 때가 있죠. “개인용 봇 하나, 업무용 봇 하나 따로 돌리고 싶은데…” 🤔 그런데 막상 두 번째 봇을 실행하면?
“Address already in use” 에러와 함께 터집니다.
오늘은 맥미니에서 OpenClaw 멀티봇을 안정적으로 운영하는 방법을 실전 경험을 바탕으로 정리해드릴게요!
🎯 왜 OpenClaw 멀티봇이 필요할까요?
한 대의 맥미니에서 여러 봇을 운영해야 하는 대표적인 상황들입니다:
- 🏠 개인 비서: 일정 관리, 메모, 알림
- 💼 업무용: 고객 응대, 문서 작성
- 🧪 테스트용: 새 기능 실험, 프롬프트 튜닝
- 👨👩👧👦 가족용: 가족 구성원별 개인 비서
이런 경우, 무작정 “한 번 더 실행”하면 100% 포트 충돌이 발생합니다. 핵심은 ‘분리’입니다!
⚠️ 멀티봇 실패의 80%는 이것 때문
OpenClaw 멀티봇 운영에서 가장 흔한 실수는 딱 두 가지입니다:
1. 설정 디렉토리 미분리
OpenClaw는 기본적으로 ~/.openclaw/에 모든 설정을 저장합니다. 두 번째 봇도 같은 경로를 사용하면?
- ❌ 설정값 덮어쓰기
- ❌ 세션 충돌
- ❌ 예측 불가능한 동작
2. Gateway 포트 미변경
OpenClaw Gateway의 기본 포트는 18789입니다. 두 번째 봇도 같은 포트를 사용하려 하면?
Error: listen EADDRINUSE: address already in use :::18789
바로 이 에러가 뜹니다! 😱
📌 방법 1: OPENCLAW_HOME 환경변수로 프로필 분리 (권장)
가장 깔끔하고 안정적인 방법입니다. OPENCLAW_HOME 환경변수로 각 봇의 ‘집’을 완전히 분리합니다.
Step 1: 두 번째 봇 설정 폴더 생성
# 두 번째 봇용 환경 설정
export OPENCLAW_HOME=~/.openclaw-bot2
openclaw configure
이 명령으로 ~/.openclaw-bot2/ 디렉토리에 완전히 독립된 설정이 생성됩니다.
Step 2: Gateway 포트 변경 (필수!)
openclaw configure 진행 중 Gateway Port 설정이 나오면:
- 첫 번째 봇: 18789 (기본값)
- 두 번째 봇: 18790
- 세 번째 봇: 18791
이렇게 순차적으로 다른 포트를 지정하세요.
Step 3: 두 번째 봇 실행
# 환경변수 지정 후 실행
export OPENCLAW_HOME=~/.openclaw-bot2
openclaw gateway
분리되는 항목 정리
| 항목 | 기본 봇 | 두 번째 봇 |
|---|---|---|
| 설정 파일 | ~/.openclaw/openclaw.json | ~/.openclaw-bot2/openclaw.json |
| 워크스페이스 | ~/.openclaw/workspace/ | ~/.openclaw-bot2/workspace/ |
| 세션 데이터 | ~/.openclaw/sessions/ | ~/.openclaw-bot2/sessions/ |
| 로그 | ~/.openclaw/logs/ | ~/.openclaw-bot2/logs/ |
| Gateway 포트 | 18789 | 18790 |
📌 방법 2: –profile 옵션 사용 (더 간편)
OpenClaw 2026년 버전부터는 –profile 옵션으로 더 쉽게 분리할 수 있습니다.
# work 프로필로 설정
openclaw --profile work configure
# work 프로필로 실행
openclaw --profile work gateway start
이 방법은 자동으로 ~/.openclaw-work/ 디렉토리를 생성하고 관리합니다.
🔄 재부팅 후 자동 시작 설정 (launchd)
맥미니가 재부팅되어도 봇들이 자동으로 시작되게 하려면 launchd를 사용합니다.
기본 봇 서비스 등록
# 기본 봇 데몬 설치
openclaw gateway install
두 번째 봇 서비스 수동 등록
두 번째 봇은 별도의 plist 파일을 만들어야 합니다:
# ~/Library/LaunchAgents/com.openclaw.bot2.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.openclaw.bot2</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/openclaw</string>
<string>gateway</string>
<string>run</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>OPENCLAW_HOME</key>
<string>/Users/yourname/.openclaw-bot2</string>
</dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
서비스 등록 및 시작
# 서비스 로드
launchctl load ~/Library/LaunchAgents/com.openclaw.bot2.plist
# 서비스 시작
launchctl start com.openclaw.bot2
# 상태 확인
launchctl list | grep openclaw
🐧 Linux 서버에서는? (systemd)
우분투나 다른 Linux 배포판에서는 systemd를 사용합니다.
# /etc/systemd/user/openclaw-bot2.service
[Unit]
Description=OpenClaw Bot2 Gateway
After=network.target
[Service]
Type=simple
Environment="OPENCLAW_HOME=/home/user/.openclaw-bot2"
ExecStart=/usr/bin/openclaw gateway run
Restart=always
RestartSec=10
[Install]
WantedBy=default.target
# 서비스 활성화 및 시작
systemctl --user daemon-reload
systemctl --user enable openclaw-bot2
systemctl --user start openclaw-bot2
❌ 절대 하면 안 되는 것: 토큰 공유
가장 중요한 경고입니다! 🚨
하나의 텔레그램 봇 토큰을 여러 인스턴스에서 동시에 사용하지 마세요!
같은 토큰을 두 곳에서 돌리면:
- ❌ 메시지 경쟁: 누가 메시지를 가져갈지 서로 싸움
- ❌ 응답 누락: 일부 메시지가 씹힘
- ❌ 랜덤 에러: 로그는 정상인데 동작이 이상함
각 봇마다 별도의 텔레그램 봇 토큰을 생성하세요. @BotFather에서 새 봇을 만들면 됩니다!
💡 채널 확장 vs 멀티봇: 뭐가 다른가요?
많은 분들이 헷갈리는 부분입니다.
채널 확장 (멀티봇 아님)
“텔레그램에서도 답하고, 디스코드에서도 답하게 하고 싶어요”
👉 이건 하나의 봇에 여러 채널을 연결하는 것입니다.
# 기존 봇에 채널 추가
openclaw configure
# → Channels 메뉴에서 Discord 활성화
이 경우:
- ✅ 포트 분리 불필요
- ✅ 설정 디렉토리 하나로 충분
- ✅ 하나의 AI 에이전트가 여러 채널에서 응답
멀티봇 (진짜 분리)
“완전히 다른 용도의 독립된 봇을 원해요”
👉 이건 별개의 봇을 여러 개 운영하는 것입니다.
이 경우:
- ✅ OPENCLAW_HOME 분리 필수
- ✅ Gateway 포트 분리 필수
- ✅ 각 봇이 독립된 워크스페이스, 세션, 설정 보유
🖥️ 맥미니 멀티봇 운영 실전 팁
1. 리소스 모니터링
맥미니 M4 기준, OpenClaw 인스턴스당 약 500MB~1GB 메모리를 사용합니다. 봇 개수에 따라:
- 8GB RAM: 3~4개 봇 가능
- 16GB RAM: 6~8개 봇 가능
- 24GB RAM: 10개 이상 봇 가능
2. 로그 분리 확인
# 기본 봇 로그
tail -f ~/.openclaw/logs/gateway.log
# 두 번째 봇 로그
tail -f ~/.openclaw-bot2/logs/gateway.log
3. 상태 확인 명령
# 기본 봇 상태
openclaw gateway status
# 두 번째 봇 상태
OPENCLAW_HOME=~/.openclaw-bot2 openclaw gateway status
4. 포트 사용 현황 확인
# 사용 중인 OpenClaw 포트 확인
lsof -i :18789
lsof -i :18790
🔧 문제 해결 가이드
“Address already in use” 에러
- 이미 실행 중인 Gateway 확인:
lsof -i :18789 - 해당 프로세스 종료:
kill -9 [PID] - 포트 변경 후 재시작
“어제는 됐는데 오늘은 안 됨”
- 환경변수 OPENCLAW_HOME 확인
- 올바른 프로필로 실행했는지 확인
openclaw doctor로 상태 점검
두 봇의 응답이 섞임
- 텔레그램 토큰이 다른지 확인
- 설정 디렉토리가 분리되었는지 확인
- 포트가 다른지 확인
📋 멀티봇 설정 체크리스트
| 항목 | 첫 번째 봇 | 두 번째 봇 | 확인 |
|---|---|---|---|
| OPENCLAW_HOME | ~/.openclaw | ~/.openclaw-bot2 | □ |
| Gateway 포트 | 18789 | 18790 | □ |
| 텔레그램 토큰 | bot1_token | bot2_token (다른 것!) | □ |
| launchd/systemd | 설정 완료 | 별도 plist 생성 | □ |
| 워크스페이스 | 분리됨 | 분리됨 | □ |
💡 마무리: 멀티봇 운영의 핵심
OpenClaw 멀티봇 운영은 어렵지 않습니다. 핵심만 기억하세요:
- 프로필 분리: OPENCLAW_HOME 또는 –profile 사용
- 포트 분리: 각 봇마다 다른 Gateway 포트
- 토큰 분리: 봇마다 별도 텔레그램 토큰
- 자동 시작: launchd(macOS) 또는 systemd(Linux) 설정
이 네 가지만 지키면 맥미니 한 대에서 5개 이상의 AI 봇을 안정적으로 운영할 수 있습니다! 🎉
여러분의 멀티봇 운영 경험은 어떠신가요? 궁금한 점이 있다면 댓글로 남겨주세요! 💬
📌 이 글이 도움이 되셨다면 공유 부탁드려요! AI 에이전트 시대, 효율적인 봇 운영이 생산성의 핵심입니다.