#출처
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 을 검색해서 시간설정법을 찾아보세요
아예 감을 못잡아서 못하겟다는분은 제외하고 좀 알겠는데
자잘한걸 모르시는분들은 댓글 달아주세요 설명해드리겠습니다.