디스코드 봇을 디스호스트에서 호스팅할 때 "실행되지 않음" 오류가 발생하면 보통 시작 스크립트나 엔트리 파일 설정 문제다. 이 글에서는 package.json 설정과 패널의 시작 명령어, 파일 배치 기준을 중심으로 단계별로 해결하는 방법을 정리한다.
증상
- 호스팅 패널에서 봇이 자동으로 실행되지 않고 오류 메시지 없이 중단됨.
- 로그에
missing start script또는 시작관련 메시지가 표시될 수 있음. - 웹 패널의 시작 탭에서 설정한 명령어로도 봇이 기동되지 않음.
원인
package.json에scripts.start가 정의되어 있지 않음.- 패널의 시작 명령어가 호스팅 환경에서 호출하는 스크립트와 일치하지 않음 (
npm run start권장). - 실제 봇 코드 파일 이름이
package.json의main또는scripts.start가 가리키는 엔트리와 불일치함. - 파일이 프로젝트 루트가 아닌 하위 폴더에 위치하여 호스팅 환경이 엔트리를 찾지 못함.
해결 방법
1단계: package.json에 start 스크립트 추가
프로젝트 루트의 package.json을 열고 scripts에 start 항목을 반드시 추가한다. 예:
{
"name": "your-bot-name",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"discord.js": "^14.0.0"
}
}
main필드는 엔트리 파일명을 가리키도록 설정한다. 위 예시는index.js를 사용.start스크립트에서 실행하는 파일명과main의 파일명을 일치시키면 관리가 수월하다.start스크립트는 호스팅 패널에서 기본 호출 명령(npm run start)으로 실행된다.
2단계: 호스팅 패널의 시작 명령어 확인 및 설정
- 호스팅 패널의 시작 탭으로 이동해 현재 설정된 시작 명령어를 확인한다.
- 시작 명령어가 다음과 같이 설정되어 있는지 확인 또는 수정한다:
npm run start
- 패널이 다른 명령어를 사용하도록 설정되어 있으면
npm run start로 변경 후 재시작한다.
3단계: 엔트리 파일명과 파일 위치 확인
- 엔트리 파일을 프로젝트 루트에 두고 파일명을
index.js로 지정하거나,package.json의main과scripts.start에서 가리키는 파일명으로 맞춘다. - 예: 엔트리가
botcode.js라면package.json을 다음처럼 수정:
"main": "botcode.js",
"scripts": {
"start": "node botcode.js"
}
- 파일 업로드는 호스팅 패널의 파일 창을 통해 프로젝트 루트로 업로드한다.
4단계: 적용 후 재시작 및 로그 확인
- 설정 변경 후 호스팅 패널에서 인스턴스를 재시작한다.
- 재시작 시 패널의 실시간 로그를 확인해
node index.js(또는 지정한 파일)가 정상 실행되는지 확인한다. - 에러가 발생하면 로그의 첫 줄부터 엔트리 파일 경로와 스크립트 호출 문구를 우선 확인한다.
마무리
정리하면, 디스코드 봇 실행 오류는 대부분 package.json의 start 스크립트와 패널의 시작 명령어 불일치, 엔트리 파일 위치 문제에서 발생한다. start 스크립트를 추가하고 패널에서 npm run start로 설정한 뒤 엔트리 파일을 루트에 배치하면 대부분 해결된다. 이 절차는 디스호스트에서 봇을 안정적으로 호스팅하는 데 기본이 된다.