🐕
ScreenとSystemdでMinecraftサーバーを管理し、GitHubにバックアップを取る
環境
- サーバー機
- Raspberry Pi 4 Model B / 8GB
- OS
- Debian GNU/Linux 11 (bullseye) aarch64
基本方針
マイクラサーバーはscreenで実行する(手動でコンソールにアクセスしたいから)。
systemdでサービスとして登録して、systemctlで起動・停止・再起動を行う。
サーバーのバックアップはGitHubで行う。Pushは1時間おきに行う。
毎週水曜日の7:30に再起動を行う。
再起動を行う前に、プレイヤーに通知を行う。
マイクラサーバーの構築
$ mkdir ~/minecraftServer
$ cd ~/minecraftServer
buildtools.jarのダウンロード
$ wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
最新版をビルド
$ java -jar BuildTools.jar --rev latest
バックアップ用のリポジトリ作成
gitを有効化
$ git init ~/minecraftServer
.gitignoreを作成
$ nano .gitignore
/apache-*
/BuildData
/Bukkit
/bundler
/CraftBukkit
/Spigot
/work
BuildTools.jar
BuildTools.log.txt
spigot-*.jar
GitHubにPush
$ git branch main
$ git add -A
$ git commit -m "1st"
$ gh repo create minecraft-backup --private --source=. --remote=upstream
サーバー操作用スクリプトの作成
スクリプトを置くためのディレクトリ作成
$ mkdir ~/script
$ mkdir ~/script/mcsv
コミットしてGitHubにPushするスクリプト
$ nano mcsv-backup_github.sh
#!/bin/bash
DATE=`date '+%Y-%m-%d %H:%M:%S %z'`
cd ~/minecraftServer
git add -A
git commit -m "$DATE"
git pull origin main --rebase
git push origin main
開始・停止・セーブ用スクリプト
$ nano mcsv-boot.sh
#!/bin/bash
SCREEN_NAME="minecraftServer"
case $1 in
save-all)
screen -x -S "$SCREEN_NAME" -p 0 -X stuff "save-all\n"
sleep 30;;
start)
/usr/bin/screen -DmS "$SCREEN_NAME" /usr/bin/java -Xmx5G -jar spigot-1.20.4.jar nogui;;
stop)
screen -x -S "$SCREEN_NAME" -p 0 -X stuff "say お知らせ: 30秒後にサーバーを再起動します\n"
screen -x -S "$SCREEN_NAME" -p 0 -X stuff "save-all\n"
sleep 30
screen -x -S "$SCREEN_NAME" -p 0 -X stuff "stop\n"
sleep 120;;
*)
echo "start | stop | save-all"
esac
systemdに登録
$ sudo nano /lib/systemd/system/minecraftServer.service
[Unit]
#ユニットの説明
Description=Minecraft Server
#ユニットが開始する順序を定義
#ネットワークが立ち上がった後に開始
After=network.target
[Service]
#作業ディレクトリを指定
WorkingDirectory=/home/user/minecraftServer
#実行ユーザーを指定
User=user
Group=user
#プロセスが落ちたとき自動的に再起動
Restart=always
RestartSec=60
#ユニット開始時のコマンド
#Javaを起動
ExecStart=/usr/bin/bash /home/user/script/mcsv/mcsv-boot.sh start
#ユニット終了時のコマンド
ExecStop=/usr/bin/bash /home/user/script/mcsv/mcsv-boot.sh stop
[Install]
#マルチユーザモード(コンソールログイン)
WantedBy=multi-user.target
cronの登録
再起動用のスクリプト
$ nano mcsv-restart.sh
#!/bin/bash
sudo systemctl stop minecraftServer
bash ~/script/mcsv/mcsv-backup_github.sh
sudo systemctl start minecraftServer
セーブ用のスクリプト
$ nano mcsv-saveall.sh
#!/bin/bash
bash ~/script/mcsv/mcsv-boot.sh save-all
bash ~/script/mcsv/mcsv-backup_github.sh
cronに登録
$ crontab -e
0 */1 * * * /usr/bin/bash /home/user/script/mcsv/mcsv-saveall.sh > /dev/null 2>&1
0 3-7 * * wed /usr/bin/screen -x -S "minecraftServer" -p 0 -X stuff "say お知らせ: 本日7:30(AM)に再起動を行います\n"
30 7 * * wed /usr/bin/bash /home/user/script/mcsv/mcsv-restart.sh
Discussion