#シェルによるバックアップシステム
Minecraftのサーバを運営していて
定期的にバックアップと再起動をしたいと思って作りました。
minecraft内での処理ではなくシェルスクリプトを使いOS側から操作することにより
MODやプラグイン無しでも動作します。
自分のために忘れないように記事にします
※あくまで自忘禄です。これにより不具合やトラブルが発生しても、当方責任は取りません。
##条件
この記事では以下の条件での作成をしています。
- Linuxサーバーであること。(Windowsでもbatを使えばおそらく可能)
- Forge ServerでもBukkit Serverでも問題ありません。
- 全てのバージョンに対応しています
※この記事はCentOS7向けに書いております。
他でもおそらく可能ですが、コマンドが一部違う部分があると思うので、置き換えてください。
##事前準備
サーバーのプロセスをscreen
環境で動かしていた方が何かと都合がいいのでscreen
が入っていない場合はインストールをします。
# yum -y install screen
rootユーザかsudoで実行してください。
次にバックアップデータを保存しておくディレクトリを作ります。
場所及びディレクトリ名は自由です。(Minecraftサーバのworldディレクトリ内だけ避けてください)
$ mkdir backup
##シェルスクリプト
今回のメインとなるプログラムです。
まずは自分の好きな場所にシェルを作りましょう。
以下マイクラサーバと同じユーザで行ってください。
viエディタの使い方
$ vi backup.sh
↓コピペ↓(※ファイルのパスだけ書き換え必要)
#!/bin/bash
#
#マイクラのバックアップ自動作成スクリプト
#######ゲーム中の人のためにメッセージを送ります。#######
time1=60 #この数字をいじることで再起動までの時間を調整可能
screen -S minecraft -X stuff 'say §a§l§n自動アナウンス'`echo -ne '\015'`
screen -S minecraft -X stuff 'say §b'$time1'§秒後に§lバックアップ§6及び§l再起動§6を行います。'`echo -ne '\015'`
time2=`expr $time1 - 10`
sleep `expr $time2`
screen -S minecraft -X stuff 'say §cまもなくサーバーが自動停止します。'`echo -ne '\015'`
sleep 10
screen -S minecraft -X stuff 'stop'`echo -ne '\015'` #minecraft終了
########## minecarftが完全に終了するまで待機 ##########
#javaのプロセス数を数えてるため
#ほかにjavaを動かしていたら調整してください
count1=`ps -ef | grep java | grep -v grep | wc -l`
while :
do
if [ $count1 = 0 ] ; then
break
else
sleep 0.5
count1=`ps -ef | grep java | grep -v grep | wc -l`
fi
done
############## バックアップ開始 #################
#ワールドディレクトリのコピー
cp マイクラのパス/world バックアップディレクトリのパス/backup
#zipに圧縮
zip バックアップディレクトリのパス/backup/world バックアップディレクトリのパス/backup
#ファイル名に日付を付ける
cp -aiv バックアップディレクトリのパス/backup/world.zip バックアップディレクトリのパス/backup/world.`date "+%Y%m%d_%H%M"`.zip
#いらないものを消す
rm -rf バックアップディレクトリのパス/backup/world
rm バックアップディレクトリのパス/backup/world.zip
############# minecraft再起動 ##############
screen -S minecraft -X stuff 'java -Xmx4096M -Xms1024M -jar サーバーjarの絶対パス(例/home/User/Minecraft/server.jar) nogui'`echo -ne '\015'`
#javaの引数は任意
細かな調整は各自お願いします。
実行できるように権限を付与します
$ chmod 744 backup.sh
##サーバーの起動
コマンドを送ったりする関係上**サーバはscreen上で起動します。**←ここ重要
screenは仮想デスクトップみたいなものです。
minecraftという名前のscreenを起動します。
$ screen -S minecraft
既にminecraftというscreenが起動している場合はアタッチします。
$ screen -r minecraft
screen内でMinecraft Serverを実行します。
シェルからでもコマンドからでも
↓コマンドの場合
$ cd マイクラサーバのパス
$ java -Xmx4096M -Xms1024M -jar server.jar nogui
これでサーバーがいつも通り起動すると思うのでデタッチします。
Ctrlキー
+aキー
を押した後にdキー
を押す。
するとLinuxのコマンドラインに戻ってきますが、裏ではマイクラのサーバが動いています。
マイクラのコンソールに戻りたいときは上記のアタッチをしてください
##バックアップの実行
screenをデタッチした状態でシェルを実行します。
$ ./backup.sh
マイクラ内にメッセージが出現して
自動停止→バックアップ→自動起動が行われれば成功です。
このようにバックファイルデータが作成されます。
バックアップの復旧はzipを解凍後worldディレクトリと置き換えてください。
以上で終了です。
お疲れさまでした。
#応用編
###24時間サーバー向け 定時実行
毎日一定の時間に自動実行することが可能です。
そのためにcron
を使用します。
CentOSには既にcronが入っているはずですが、入っていなかったらインストールします。
# yum -y install crontabs
クーロンを作成します。マイクラサーバと同じユーザで行ってください
$ crontab -e
viエディタが起動します
以下例です。
例えば、AM6:00とPM4時に実行かけたかったとすると
0 6,16 * * * /home/User/backup.sh(backup.shの絶対パス)
と、記述します。
詳しくはこちらの記事が優良なのでご覧ください。