マイクラサーバーの自動バックアップ設定|cronで毎日ワールドを守る【コピペOK】


※本記事にはアフィリエイト広告(プロモーション)が含まれています。

ワールドデータは一度壊れたら戻りません。原因はディスク障害だけでなく、Modの更新ミス、電源断による書き込み中断、うっかり /fill の誤爆など日常に転がっています。筆者もModを1つ抜いた瞬間にワールドの一部が消えた経験があり、それ以来バックアップは全サーバーで自動化しています。

この記事のスクリプトをコピペすれば、毎日自動で7世代分のバックアップが取れるようになります。

方針: 停止snapshotが一番確実

マイクラは稼働中もワールドを書き込み続けるため、動いたままコピーすると壊れたバックアップができることがあります。確実なのは「サーバーを止めて → コピーして → 起動する」方法です。深夜4時に実行すれば、停止時間は1〜2分。誰も気づきません。

手順1: バックアップスクリプトを作る

構築ガイドの構成(/opt/minecraft、systemdサービス名 minecraft)を前提にしています。パスが違う場合は冒頭の変数だけ直してください。

cat > /opt/minecraft/backup.sh << 'EOF'
#!/bin/bash
set -eu

SERVER_DIR=/opt/minecraft
BACKUP_DIR=/opt/backups/minecraft
SERVICE=minecraft
KEEP=7   # 保存する世代数

mkdir -p "$BACKUP_DIR"

# サーバー停止(プレイヤーの書き込みを止める)
systemctl stop "$SERVICE"

# ワールドと設定を圧縮保存
tar -czf "$BACKUP_DIR/world_$(date +%F_%H%M).tar.gz" \
    -C "$SERVER_DIR" world server.properties

# サーバー再開
systemctl start "$SERVICE"

# 古い世代を削除(最新KEEP件だけ残す)
ls -1t "$BACKUP_DIR"/world_*.tar.gz | tail -n +$((KEEP + 1)) | xargs -r rm --

echo "backup done: $(date)"
EOF

chmod +x /opt/minecraft/backup.sh

ポイントは set -eu と再起動の順序です。万一 tar が失敗してもスクリプトが止まるだけで、Restart=on-failure を設定済みならサーバーは次の起動機会に復帰します。

手順2: 動作確認

cronに載せる前に、必ず手動で1回実行します。

/opt/minecraft/backup.sh
ls -lh /opt/backups/minecraft/

world_2026-07-06_0400.tar.gz のようなファイルができていれば成功です。

手順3: cronで毎日実行する

crontab -e
# 以下を追加(毎日AM4:00に実行)
0 4 * * * /opt/minecraft/backup.sh >> /var/log/mc-backup.log 2>&1

ログをファイルに残しておくと、失敗に気づけます。数日運用したら cat /var/log/mc-backup.log で動いているか確認してください。

手順4: 復元方法(ここまで確認して完成)

バックアップは「復元できること」を確認して初めて意味があります。

systemctl stop minecraft
cd /opt/minecraft
mv world world_broken            # 壊れたワールドを退避
tar -xzf /opt/backups/minecraft/world_2026-07-06_0400.tar.gz -C /opt/minecraft
systemctl start minecraft

一度テスト復元をやっておくと、本番の事故時に慌てません。

容量の目安

ワールドの圧縮後サイズは、遊び込んだサーバーで数百MB〜数GB程度です。7世代で足りるかは df -h でディスク残量を見て調整してください。VPSのディスクが心もとない場合は、KEEP=3 に減らすか、scp/rclone で手元PCやクラウドストレージに逃がす構成に発展させられます。

統合版・Palworldへの応用

スクリプトの変数を変えるだけで、そのまま流用できます。

まとめ

  • バックアップは「停止 → tar → 起動」を深夜にcron実行が確実
  • 世代管理とログ出力までスクリプトに含めておくと放置できる
  • 取ったバックアップは一度テスト復元して初めて完成