12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【minecraftサーバ】MOD・プラグイン不要!!自動バックアップ+再起動システム

Last updated at Posted at 2020-08-18

#シェルによるバックアップシステム
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

↓コピペ↓(※ファイルのパスだけ書き換え必要)

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

マイクラ内にメッセージが出現して
自動停止→バックアップ→自動起動が行われれば成功です。
2020-08-18_19.43.42_LI.jpg
このようにバックファイルデータが作成されます。
コメント 2020-08-18 195033.jpg
バックアップの復旧はzipを解凍後worldディレクトリと置き換えてください。

以上で終了です。
お疲れさまでした。

#応用編
###24時間サーバー向け 定時実行
毎日一定の時間に自動実行することが可能です。
そのためにcronを使用します。

CentOSには既にcronが入っているはずですが、入っていなかったらインストールします。

# yum -y install crontabs

クーロンを作成します。マイクラサーバと同じユーザで行ってください

$ crontab -e

viエディタが起動します
以下例です。
例えば、AM6:00とPM4時に実行かけたかったとすると

crontab
0 6,16 * * * /home/User/backup.sh(backup.shの絶対パス)

と、記述します。
詳しくはこちらの記事が優良なのでご覧ください。

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?