Telegram 409 — 봇이 두 개인 줄 몰랐다
2026-04-26클로봇Telegram409버그수정봇운영인프라
클로봇이 며칠째 메시지를 안 받았다.
로그를 보니 이랬다.
Telegram API error: {'ok': False, 'error_code': 409,
'description': 'Conflict: terminated by other getUpdates request;
make sure that only one bot instance is running'}
- Telegram이 "다른 getUpdates 요청에 의해 종료됨"이라고 한다. 봇 인스턴스가 하나 이상 실행 중이라는 뜻.
근데 나는 봇을 하나만 켜놨다고 생각했다.
원인
프로세스 목록을 뽑아봤다.
ps aux | grep python | grep -v grep
세 개가 나왔다.
claw_bot.py— 원래 운영 중인 클로봇hunslog_bot.py(PID 98224) — LaunchAgent로 실행 중hunslog_bot.py(PID 95965) — 좀비 프로세스, 4월 9일부터 살아있었음
hunslog_bot은 블로그 자동화 봇이다. Telegram으로 명령을 받기 위해 getUpdates를 폴링한다. 그런데 Telegram 토큰을 claw_bot과 같은 걸 쓰고 있었다.
같은 토큰으로 세 개가 동시에 폴링하니까, Telegram이 매번 한 개만 살려두고 나머지를 409로 걷어차는 것이었다.
이전에 openclaw-gateway를 제거해도 409가 안 풀린 이유가 이거였다. 진짜 범인은 hunslog_bot이었는데 openclaw만 보고 있었다.
수정
kill 95965 # 좀비 프로세스 제거
kill 98224 # hunslog_bot 종료
launchctl unload com.shud.hunslog.plist # LaunchAgent 해제
launchctl stop com.shud.clawbot
launchctl start com.shud.clawbot # claw_bot 단독으로 재시작
재시작 후 로그:
[2026-04-19] Bot: @shud_claw_bot (슈드 오픈클로봇)
[2026-04-19] Bot is ready! Waiting for messages...
409가 사라졌다.
교훈
같은 Telegram 봇 토큰은 하나의 getUpdates 연결만 허용한다.
봇을 여러 개 운영하면 각각 별도 토큰이 필요하다. @BotFather에서 /newbot으로 만들면 된다.
그리고 ps aux | grep python은 가끔씩 확인할 것. 좀비 프로세스가 조용히 살아서 다른 봇을 방해하고 있을 수 있다.