파이썬 자동매매 서버가 멈추지 않게 하는 법

AWS 서버에서 자동매매 봇을 crontab으로 1분마다 돌리는 구조는 간단하지만, 봇이 늘어나면 어느 날 서버가 멈출 수 있습니다. 게만아도 1년 이상 정상이던 서버가 멈춘 경험이 있습니다. 핵심 대응은 실행 시간 제한, 중복 실행 방지, 실행 시점 분산, 서버 감시, 알맞은 인스턴스 선택 다섯 가지입니다.

쉽게 말하면 · 자동매매 서버는 정해진 시간마다 봇을 깨우는 구조입니다. 그런데 깨운 봇이 끝나지 않고 남아 있으면 쌓이다가 서버가 버티지 못합니다. 그래서 “오래 걸리면 끄기 · 이미 돌고 있으면 새로 안 켜기 · 한꺼번에 깨우지 않기”가 필요합니다.

실제로 있었던 일

게만아의 자동매매 서버(AWS t2.small)는 1년 이상 정상적으로 돌았는데, 최근에 1분마다 도는 시스템을 계속 추가하다가 서버가 멈췄습니다. 어떤 이유에서든 파이썬 봇이 끝나지 않고 서버에 떠 있는 채 대기하는 일이 쌓인 것이 원인으로 보였습니다. 서버에 접속조차 되지 않아 AWS 웹사이트에서 서버를 중지했다가 다시 시작해 복구했습니다.

이런 일은 봇이 한두 개일 때는 드러나지 않다가 1분 주기 봇이 늘어난 뒤에야 나타납니다. 그래서 실전에서 겪기 전에는 알기 어렵습니다.

서버를 안정적으로 돌리는 5가지

1. 실행 시간 제한 — timeout

봇이 어떤 이유로 멈춰도 정해진 시간이 지나면 강제 종료되도록 crontab 명령 앞에 timeout을 붙입니다. 무한 대기 상태의 봇이 서버에 남는 것을 막습니다.

2. 중복 실행 방지 — singleton

1분마다 도는 봇은 1분 안에 끝나야 합니다. 작업이 많아 1분을 넘기면 crontab이 같은 봇을 또 실행해 중복 실행이 됩니다. 봇 첫 부분에 singleton을 넣으면 이미 실행 중일 때 새 실행이 알아서 종료됩니다.

3. 실행 시점 분산 — sleep 또는 주기 늘리기

1분 주기 봇이 많아지면 같은 순간에 몰려 서버가 힘들어집니다. 시점이 중요하지 않은 봇은 2분 주기로 늘리거나, 앞에 sleep을 붙여 같은 분 안에서도 실행 시점을 어긋나게 합니다.

# 1) 최대 120초만 실행하고 강제 종료 (crontab)
*/1 * * * * timeout 120 python3 /var/autobot/BotA.py

# 2) 같은 봇이 이미 실행 중이면 새 실행은 종료 (봇 파이썬 파일 첫 부분)
#    사전 설치: pip3 install tendo
from tendo import singleton
me = singleton.SingleInstance()

# 3) 같은 분에 도는 봇을 10초씩 어긋나게 실행 (crontab)
*/1 * * * * timeout 120 python3 /var/autobot/BotA.py
*/1 * * * * sleep 10 && timeout 120 python3 /var/autobot/BotB.py
*/1 * * * * sleep 20 && timeout 120 python3 /var/autobot/BotC.py

4. 서버 감시와 알림

메모리·CPU·Swap·디스크 사용량을 주기적으로 확인해 내가 연동한 메신저로 알림을 받으면 멈추기 전에 이상을 알 수 있습니다. 경고가 잠깐 떴다가 시간이 지나 정상으로 돌아오면 괜찮은 것입니다. 게만아 패키지 80번의 서버 감시 시스템은 CPU 부하가 기준을 넘고 다른 항목도 위험일 때 과도하게 실행 중인 파이썬 봇을 강제 종료하고, 한 번 종료한 뒤에는 일정 시간 쿨타임을 두도록 구성했습니다. 다만 이 자동 종료 기능은 서버가 정상이어서 실제로 발동해 본 적은 아직 없습니다.

5. 인스턴스 선택 — t2보다 t3

t2와 t3는 둘 다 평소엔 낮은 성능으로 돌다가 필요할 때 CPU를 순간적으로 많이 쓰는 버스터블(CPU 크레딧) 인스턴스입니다. 일반적으로 t3는 크레딧 회복이 빠르고, 크레딧이 떨어졌을 때 성능 저하가 완만해 자동매매·수집·crontab 서버에 더 적합합니다. 가격은 거의 비슷하므로 게만아는 지금 새로 만든다면 t3를 권장합니다. 이미 t2를 쓰고 있다면 위 1~4번을 적용해 안정적으로 운용하세요.

서버가 멈췄을 때

  1. 서버에 접속이 되는지 확인합니다.
  2. 접속이 안 되면 AWS 웹사이트에서 해당 인스턴스를 중지했다가 다시 시작합니다.
  3. 정상으로 돌아오면 원인이 된 봇의 timeout·중복 실행 방지·실행 분산부터 점검합니다.

그 사이 봇이 멈춰 있는 동안의 주문·포지션은 거래소·증권사 앱에서 직접 확인하세요.

서버가 부담스럽다면

처음부터 AWS 서버가 필수는 아닙니다. 내 PC에서 파일을 실행하고 일정을 등록해 시작할 수 있는 GMA Runner가 있습니다. 다만 PC가 꺼지거나 절전이면 예약 실행이 시작되지 않으므로, 24시간 안정 운용이 중요해지면 서버를 고려하세요.

GMA Runner 보기 →

자주 묻는 질문

자동매매 서버가 갑자기 멈추는 이유는 무엇인가요?

대표적인 원인은 봇이 끝나지 않고 서버에 계속 남는 것입니다. 응답을 기다리다 무한 대기에 빠지거나, 1분마다 도는 봇이 1분 안에 끝나지 않아 같은 봇이 겹쳐 실행되면 메모리와 CPU가 쌓여 서버가 느려지다가 멈출 수 있습니다. 게만아도 1년 이상 정상이던 서버가 1분 주기 시스템을 계속 추가한 뒤 멈춘 적이 있습니다.

crontab에서 봇이 멈춘 채 남지 않게 하려면 어떻게 하나요?

실행 앞에 timeout 120처럼 시간 제한을 붙이면 봇이 어떤 이유로 멈춰도 정해진 시간이 지나면 강제 종료됩니다. 제한 시간은 봇이 정상적으로 끝나는 데 걸리는 시간보다 넉넉하게 정하세요.

1분마다 도는 봇이 중복 실행되는 것을 막으려면?

봇 첫 부분에 파이썬 tendo 모듈의 singleton.SingleInstance()를 넣으면 이미 같은 봇이 실행 중일 때 새로 시작된 쪽이 알아서 종료됩니다. pip3 install tendo로 설치합니다.

같은 시각에 여러 봇을 돌려도 되나요?

가능하지만 1분 주기 봇이 많아지면 서버가 힘들어질 수 있습니다. 시점이 중요하지 않은 봇은 주기를 2분으로 늘리거나, sleep 10 &&처럼 앞에 대기를 붙여 같은 분 안에서도 실행 시점을 어긋나게 분산하세요.

AWS 인스턴스는 t2와 t3 중 무엇이 좋은가요?

둘 다 평소엔 낮은 성능으로 돌다가 필요할 때 CPU를 순간적으로 많이 쓰는 버스터블 인스턴스입니다. 일반적으로 t3가 CPU 크레딧 회복이 빠르고 크레딧이 떨어졌을 때 성능 저하가 완만해, 게만아는 지금 새로 만든다면 t3를 권장합니다. 가격은 거의 비슷합니다.

서버에 접속조차 안 될 때는 어떻게 복구하나요?

AWS 웹사이트에서 해당 서버(인스턴스)를 중지했다가 다시 시작하면 됩니다. 게만아도 서버가 멈췄을 때 재시작으로 복구했습니다. 이후 원인이 된 봇의 timeout·중복 실행 방지·실행 분산부터 점검하세요.

근거와 확인 시점

이 페이지는 게만아의 AWS 서버 안정화 포스팅(패키지 80번, 2025-12-22 게시)과 실제 서버 운용 경험을 정리한 것입니다. t2·t3 비교는 일반적으로 알려진 특성이며 AWS의 인스턴스 사양·요금은 바뀔 수 있으므로 AWS 공식 문서의 최신 내용을 확인하세요. 서버 감시의 구체적인 구현과 기준값은 패키지 콘텐츠에서 제공합니다.

함께 보기

시작·세팅 가이드 · GMA Runner · API가 불안정할 때 대응 가이드 · crontab 용어 풀이 · 서버 / AWS 용어 풀이

문서 업데이트: 2026-10-16 · 교육·기술 정보 제공 목적이며 투자 권유가 아닙니다. 서버 설정으로 모든 장애를 막을 수는 없습니다.