디스코드 봇을 외부 호스팅 서비스(예: 디스호스트, Pterodactyl 등)에 올려두었을 때 브라우저나 개인 PC를 닫아도 봇이 계속 동작하는지, 그리고 실행 도중 자꾸 크래시되는 원인과 해결 방법을 정리한다. 로그에서 흔히 보이는 오류들(No such file, ModuleNotFoundError)을 중심으로 문제를 해결하는 절차를 제시한다.
증상
- 서버 로그에 다음과 같은 에러가 출력되며 프로세스가 크래시한다:
/usr/local/bin/python: can't open file '/home/container/app.py': [Errno 2] No such file or directoryTraceback (most recent call last): ... ModuleNotFoundError: No module named 'disnake'
- 호스팅 패널에서 프로세스가 반복해서 재시작되다가 "crashed state"로 멈춘다.
- 무료 플랜에서는 일정 기간(예: 7일) 후 자동으로 중지되거나 삭제될 수 있다.
원인
- 시작 명령(STARTUP_FILE)이 실제 존재하지 않는 파일(
app.py)을 가리킴 → 프로세스가 실행되지 못하고 즉시 종료. - 코드에서 사용하는 패키지(
disnake등)가 설치되어 있지 않음 →ModuleNotFoundError발생. - 호스팅 무료 플랜의 자동 만료 정책 때문에 인스턴스가 중지됨(외부 접속 제한 또는 자동 삭제 조건 포함).
해결 방법
1단계: 호스팅 환경 특성 확인
- 외부 호스팅(디스호스트, Pterodactyl 등)을 사용하면 브라우저나 개인 PC를 종료해도 서버는 계속 동작한다.
- 로컬 PC나 세션형 환경(예: Google Colab)에서 실행 중이면 세션 종료 시 봇이 종료된다.
- 따라서 지속 동작이 필요하면 외부 호스팅을 사용해야 한다.
2단계: 시작 파일 설정 확인 및 수정
- 패널의 시작 명령(Startup Command 또는 STARTUP_FILE 변수)을 실제 존재하는 엔트리 포인트 파일로 변경한다. 예를 들어 엔트리 파일이
main.py라면:
# 예시 시작 명령
/usr/local/bin/python /home/container/main.py
# 또는 패널이 변수 방식이면
/usr/local/bin/python /home/container/${STARTUP_FILE}
# 그리고 STARTUP_FILE 값을 main.py 로 설정
- 파일명 오타나 경로 오류가 없도록 파일 목록을 확인한 뒤 설정을 저장하고 재시작한다.
3단계: 필요한 파이썬 패키지 설치
- 호스팅 패널은 보통 배포 시
requirements.txt를 자동으로 설치한다. 코드에서 사용하는 라이브러리를requirements.txt에 명시한다. - 예시
requirements.txt:
discord.py==2.7.1
disnake==2.14.0
python-dotenv==1.2.2
- 실제 코드가
import disnake를 사용하면disnake를,import discord/discord.py를 사용하면discord.py만 추가한다. 중복으로 둘 다 설치해도 되지만 불필요한 충돌이 없는지 확인한다. - 수동 설치가 필요하면 터미널에서:
pip install -r requirements.txt
# 또는
pip install disnake
4단계: 로그로 재확인 및 반복 검사
- 설정 변경 후 패널 로그를 확인하여 같은 에러가 반복되는지 확인한다.
No such file에러가 사라지고,ModuleNotFoundError가 발생하지 않으면 정상적으로 실행된다.- 문제가 지속되면 엔트리 파일의 첫 줄에서 어떤 모듈을 임포트하는지, 해당 파일이 리포지토리에 업로드되어 있는지 다시 확인한다.
5단계: 무료 플랜 정책에 대한 대비
- 무료 플랜은 보통 7일 단위로 기간이 설정되어 있을 수 있고, 만료 전 갱신이 필요하다. 갱신은 패널의 갱신 버튼을 통해 수행한다.
- 외부 접속(포트 노출 등)이 무료 플랜에서 제한될 수 있으므로 외부 API나 웹훅을 사용해야 할 경우 유료 옵션을 고려한다.
마무리
외부 호스팅에 올려둔 디스코드 봇은 브라우저나 개인 컴퓨터를 닫아도 계속 동작한다. 반복 크래시는 대부분 잘못된 시작 파일 지정 또는 필요 패키지 미설치가 원인이다. 시작 명령과 requirements.txt를 점검해 정상 실행 상태로 만든 뒤 호스팅의 만료 정책을 확인하여 장기 운영 계획을 세우면 안정적으로 운영할 수 있다.