게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[리눅스] 서버 자동 재시작 스크립트 설명해드립니다.
게시물ID : minecraft_4442짧은주소 복사하기
작성자 : 시크한민
추천 : 1
조회수 : 4470회
댓글수 : 4개
등록시간 : 2011/09/14 15:34:06
#출처 http://www.minecraftwiki.net/wiki/Server_startup_script
#세팅
#SERVICE 는 실행시킬 서버파일의 이름을 입력하시면 됩니다. 
#버킷의 경우에는 craftbukkit-0.0.1-SNAPSHOT.jar 가 되겠네요.
SERVICE='minecraft_server.jar'

#그래픽창이 안뜨게 하는겁니다. 기본값으로 놔두세요.
OPTIONS='nogui'

#당신의 리눅스 계정 이름을 입력하시면 됩니다.
#되도록 root 는 사용하지 않으셨으면 좋겠네요.
USERNAME='minecraft'

#백업할 맵의 이름입니다.
WORLD='world'

#마인크래프트가 설치된 폴더의 경로입니다.
# /home/계정이름/서버파일이 설치된 폴더
MCPATH='/home/minecraft/minecraft'

# 백업된 맵이 저장될 폴더를 지정하시면 됩니다.
# 저의 경우에는 /home/계정/backups 라는 폴더를 새로 생성해서 지정했습니다.
BACKUPPATH='/media/remote.share/minecraft.backup'

# cpu의 코어 개수를 적어주시면됩니다. 듀얼코어면 2개. 쿼드코어면 4개. 
# i3 던가요. 코어는 2개지만 스레드가 4개인 cpu가. 4를 적어주시면 됩니다.
CPU_COUNT=1

# 실제 서버를 실행시키는 구문입니다. 자바의 가비지 컬렉션 및 옵션을 잘아시는 분은
# 수정해서 쓰시면 됩니다. 
INVOCATION="java -Xmx1024M -Xms1024M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $SERVICE $OPTIONS"

# 마인크래프트를 실행시키는 함수입니다. echo 에 자신이 원하는 적당한 메세지를 입력하시면 됩니다.
# 자신의 서버가 설치된 컴퓨터에서만 보이는 메세지 이기 때문에 맘대로 적으셔도 됩니다.
# 예>  echo "$SERVICE 서버가 시작하고 있습니다."
# 약간의 프로그래밍 지식이 있으시다면 수정해도 무방하지만
# 잘 모르신다면 걍 건들지 않는게 좋습니다.
mc_start() {
  if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  then
    echo "$SERVICE is already running!"
  else
    echo "Starting $SERVICE..."
    cd $MCPATH
    bash -c "cd $MCPATH && screen -dmS minecraft $INVOCATION"
    sleep 7
    if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
    then
      echo "$SERVICE is now running."
    else
      echo "Error! Could not start $SERVICE!"
    fi
  fi
}

# 백업을 할때 현재 상태의 맵을 강제로 저장하는 역할을 합니다.
mc_saveoff() {
  if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  then
    echo "$SERVICE is running... suspending saves"
    bash -c "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
    bash -c "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
    bash -c "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
    sync
    sleep 10
  else
    echo "$SERVICE is not running. Not suspending saves."
  fi
}

# 백업이 끝난뒤 다시 동작하도록 하는 함수
mc_saveon() {
  if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  then
    echo "$SERVICE is running... re-enabling saves"
    bash -c "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
    bash -c "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  else
    echo "$SERVICE is not running. Not resuming saves."
  fi
}

# 마인크래프트를 종료할때 사용하는 함수입니다.
mc_stop() {
  if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  then
    echo "Stopping $SERVICE"
    bash -c "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
    bash -c "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
    sleep 10
    bash -c "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
    sleep 7
  else
    echo "$SERVICE was not running."
  fi
  if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  then
    echo "Error! $SERVICE could not be stopped."
  else
    echo "$SERVICE is stopped."
  fi
}

# 마인크래프트를 백업하는 함수입니다. 
mc_backup() {
   echo "Backing up minecraft world..."
   if [ -d $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"` ]
   then
     for i in 1 2 3 4 5 6
     do
       if [ -d $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`-$i ]
       then
         continue
       else
         bash -c "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`-$i"
         break
       fi
     done
   else
     bash -c "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
     echo "Backed up world"
   fi
   echo "Backup complete"
}

# 서버콘솔창에 명령어를 직접 입력할때 사용하는 함수입니다.
mc_command() {
  if [ "$1" ]
  then
    command="$1";
    if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
    then
      echo "$SERVICE is running... executing command"
      bash -c "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"
    fi
    else
      echo "Must specify server command"
  fi
}

#Start-Stop here
# 명령어를 분석해서 실제 함수들을 호출하는 코드들입니다.
case "$1" in
  start)
    mc_start
    ;;
  stop)
    mc_stop
    ;;
  restart)
    mc_stop
    mc_start
    ;;
  backup)
    mc_saveoff
    mc_backup
    mc_saveon
    ;;
  status)
    if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
    then
      echo "$SERVICE is running."
    else
      echo "$SERVICE is not running."
    fi
    ;;
  command)
    mc_command "$2"
    ;;

  *)
  echo "Usage: ./minecraft.sh {start|stop|backup|status|restart|command \"server command\"}"
  exit 1
  ;;
esac

exit 0

================================================================================================


사용법

리눅스에서

1. 
자신의 계정에  minecraft.sh 라는 파일을 새로 생성시켜서
(예 : /home/계정이름/minecraft.sh)

위에 적절하게 세팅한 내용을 붙여넣습니다.

2.
그리고 minecraft.sh 가 저장되어있는 폴더에서 

chmod -R 755 minecraft.sh

를 입력해줘서 실행가능한 파일로 권한을 변경해줍니다.

3. 
crontab -e 를 이용해서

참고>
 m forminute between 0 and 59 
 h for hour between 0 and 11 
 dom for day of month between 1 and 31 
 mon for month between 1 and 12 
 dow for day of week between 0 and 7, sunday is represented by 0 or 7, 

적절하게 아래와 같은 규칙으로 설정해줍니다.
#m h dom mon dow
* * * * * * /home/계정이름/minecraft start &>/dev/null
* * * * * * /home/계정이름/minecraft restart &>/dev/null
* * * * * * /home/계정이름/minecraft backup &>/dev/null

예를들어 2시간마다 재시작을 하게 하고 싶다.
* */2 * * * * /home/계정이름/minecraft restart &>/dev/null

예를들어 5분마다 서버가 꺼져있으면 다시 시작하게 하고 싶다.
*/5 * * * * * /home/계정이름/minecraft start &>/dev/null

새벽 1시면 서버가 종료되게 하고 싶다.
0 1 * * * * /home/계정이름/minecraft restart &>/dev/null

자세한건 crontab 을 검색해서 시간설정법을 찾아보세요


아예 감을 못잡아서 못하겟다는분은 제외하고 좀 알겠는데

자잘한걸 모르시는분들은 댓글 달아주세요 설명해드리겠습니다. 
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호