마인크래프트 서버를 업데이트 후 종료하자!

R을 이용해 Minecraft 서버 업데이터 만들기


출처: https://www.flickr.com/photos/12742655@N05/11046365385

어쩌다 시작한 Minecraft 서버 운영, 그리고 어려움

어쩌다 보니 Minecraft 서버를 운영하게 되었다. Minecraft 게임을 단 한 번도 해본 일이 없지만, 좋아하는 아티스트의 팬이 아티스트와 Minecraft를 해보고 싶다 하여 수소문해 Minecraft 서버 이미지를 받고 운영을 시작하였다.

그런데 운영상 문제가 있었다. Minecraft 서버 버전이 클라이언트 버전과 함께 올라가야 한다는 점이었다. 게다가 매번 Minecraft 서버 버전이 올라갈 때마다 다운로드 주소가 변경됐다. Minecraft 게임을 하지 않는 입장에서는 꽤 곤란한 처지가 됐다.

Minecraft 서버 운영을 도와주는 프로그램을 GitHub 등에서 찾아봤지만, 이미 운영을 멈춘 경우가 많았다. 어찌해야 하나 난처해 하다가, 직접 Minecraft 서버 업데이터를 만들기로 했다.

사용할 수 있는 언어가 PHP 또는 통계 프로그래밍 언어 R 뿐이었기 때문에, R로 만들기로 결정했다.

R로 만드는 업데이터

내가 작성한 코드는 의외로 간단했다. 필요한 프로그램은 R과 wget, R의 라이브러리 중 jsonlite가 필요하다.

#!/usr/bin/R
# Minecraft server updater
  # https://launchermeta.mojang.com/mc/game/version_manifest.json
  # get recent Minecraft Release Information
  rawJSON <- jsonlite::fromJSON('https://launchermeta.mojang.com/mc/game/version_manifest.json')
  rawJSON$latest$release
  rawJSON <- jsonlite::fromJSON(rawJSON$versions$url[rawJSON$versions$id %in% rawJSON$latest$release])
  serverfile <- rawJSON$downloads$server$url
  
  system(paste('/usr/bin/wget', serverfile,'-O /home/minecraft/server.jar'))

이걸 minecraft.R로 저장해서 실행했다.

/usr/bin/Rscript /home/minecraft/minecraft.R
코드 실행 결과

단 몇 줄만 작성했을 뿐인데 정상적으로 다운로드가 됐다.

자동 업데이트 적용하기

그런데 이 업데이터를 만든 이유는 자동 업데이트를 위한 것이었다. 그래서 자동 업데이트를 적용해 보았다. 리눅스 bash 쉘에서 다음과 같이 입력하였다.

crontab -e

그 후 crontab에 새 일정을 추가하고 Crontab을 저장하였다.

0       0       *       *       *       /usr/bin/Rscript /home/minecraft/minecraft.R
새 줄을 추가한 모습

이제 매일 0시 0분에 새로운 Minecraft 서버를 다운로드 할 것이다.

서버가 재 시작할 때에도 적용하고 Minecraft 서버 구동하기

첫 줄에 있는 @reboot 줄 또한 서버가 켜질 때 Minecraft 서버를 다운로드하고 Minecraft 서버를 구동하는 명령으로 구성하였다. 역시 Crontab에 다음 줄을 추가하면 된다.

@reboot /usr/bin/Rscript /home/minecraft/minecraft.R  && /usr/bin/java -Xms1024M -Xmx1024M -jar /home/minecraft/server.jar nogui &

조금이라도 편리한 삶

자동화는 단순 반복 작업에 적용되어야 한다. 몇 줄 안 되는 코드지만, 조금이라도 편리한 삶을 위해 공유하였다. R로 만들어서 범용성이 낮을 수는 있지만 Minecraft 서버를 운영하는 누군가에게는 부디 조금 편리할 수 있기를 바랄 뿐이다.