본문 바로가기
서버/Server

[Server] 마인크래프트 모드버킷 서버 크래쉬 났을 때 자동 재시작

by jamong1014 2023. 5. 25.
반응형

일반 버킷으로 서버 굴릴 때는 오류가 많이 나지 않지만, 많은 모드를 적용하여 서버를 굴릴 때는 오브젝트간의 오류, 충돌 등으로 크래쉬가 빈번하게 발생하곤 한다.

모드버킷 실행 중
crash-reports

크래쉬에 대한 문제점을 찾고 해결하는게 1순위이긴 하지만 그래도 24시간 돌려야 되는 서버가 중간에 끊어지게 되면 사용자들이 불편함을 느낄 수 있기 때문에 서버는 지속적으로 굴러가야 한다.

그래서 크래쉬가 터져도 자동으로 재시작 되는 프로세스가 있어야 한다.

 

찾아보니 버킷 자체에 크래쉬가 터지면 자동재시작이 되는 서버 옵션이 존재하지만 모드 버킷에는 없다고 한다.

즉 프로세스를 하나 그냥 만들어줘야 한다.


1. 먼저 메모장을 켜준다.

restart.bat

@echo off

:repeat
Timeout 3 > NUL

 

@tasklist | find "java.exe" /c > NUL
IF %ErrorLevel%==1 goto 1
IF NOT %ErrorLevel%==1 goto 0

 

:0
goto repeat

 

:1
start run.bat
goto repeat

출처 : https://www.ddengle.com/mining/2310956

 

● 위 코드를 그대로 복사하고 다른 이름으로 저장하고 파일 형식으로 '모든 파일' 이라고 하고 파일 이름에 'restart.bat' 이라고 적고 저장한다.

 

코드 설명을 잠시 하자면 tasklist 즉 프로세스 리스트를 확인하고 | find "java.exe" java.exe 라는 프로세스를 찾고 없으면 goto 1 즉 1 코드를 실행.

그게 아니라면 0 코드 실행.

0 코드는 repeat  코드를 실행하는 것인데 3초마다 프로세스가 죽었는지 살았는지 확인.

 

2. 만들어진 restart.bat 파일을 모드 버킷 실행 파일이 있는 폴더에 저장 또는 이동해준다.

그럼 1코드가 실행될 때마다 같은 폴더에 있는 원래 모드 버킷 실행 파일(run.bat)을 실행시켜 주는 것이다.

 

timeout이 잘 실행되는 모습

위와 같은 형식으로 그냥 켜두면 된다.

이제 서버가 크래쉬가 터져서 꺼지게 되면 자동으로 java.exe 프로세스도 꺼지게 된다.

그럼 java.exe가 프로세스 리스트에 없는걸 timeout을 통해 확인하고 다시 재시작 하게 된다.

반응형

댓글