Minecraft 統合版自動アップデートスクリプト
元々限定公開していたものを全体公開に変更しました。
構築自体は1年以上も前なので、どのサイト見ながら構築したのか忘れてしまった・・・
AIに食わすなりして、カスタマイズしてください。
そろそろ年末年始でMinecract統合版のサーバ需要が出てくる気がしたので作った。
※公式サイトはコロコロリンクが変わって探すのが大変なので、非公式Wikiからリンクを取得するように変更しました。
-
ファイル作成
vi /opt/minecraft/auto-download.sh -
auto-download.sh 記述内容
#!/bin/bash SERVER_WIKI_URL="https://minecraft.wiki/w/Bedrock_Dedicated_Server" # CUIでHTMLからLinux版のダウンロードリンクを抽出し、最新のものを選択 DOWNLOAD_URL=$(curl -s "${SERVER_WIKI_URL}" | grep -oP 'href="https://[^"]+/bin-linux/[^"]+\. zip' | sed -e 's/href="//g' | sort -V | tail -n 1) # URLが存在するか確認 if [ -z "$DOWNLOAD_URL" ]; then echo "ダウンロードURLが見つかりませんでした。サイトのHTML構造が変わった可能性があります。 " exit 1 fi echo "ダウンロードを開始します: ${DOWNLOAD_URL}" # 抽出したURLを使ってダウンロード wget -P /usr/local/games/minecraft/zips "${DOWNLOAD_URL}" echo "ダウンロードが完了しました。" -
ファイル作成
vi /opt/minecraft/auto-update.sh -
auto-update.sh 記述内容
#!/bin/bash # =============================== # ダウンロードスクリプト実行 # =============================== /opt/minecraft/auto-download.sh # =============================== # 変数宣言 # =============================== MC_WORK_DIR="/usr/local/games/minecraft" MC_BKUP_DIR="${MC_WORK_DIR}/backups" MC_ZIP_DIR="${MC_WORK_DIR}/zips" MC_LOG_DIR="/var/log" LOG_FILE_NAME="$(date '+%Y%m%d')_minecraft_auto_status_CHK.log" MC_LOG_FILE="${MC_LOG_DIR}/${LOG_FILE_NAME}" # 最新のZIPファイル名を取得 LATEST_ZIP_FILE=$(ls -1t "${MC_ZIP_DIR}"/*.zip | head -n 1) # 拡張子を除いたファイル名を取得 MC_ZIP_FILE_NO_EXT=$(basename "${LATEST_ZIP_FILE}" .zip) # 解凍先ディレクトリ UNZIP_DIR="/tmp/${MC_ZIP_FILE_NO_EXT}" # =============================== # 解凍 # =============================== mkdir -p "${UNZIP_DIR}" unzip -q "${LATEST_ZIP_FILE}" -d "${UNZIP_DIR}" # =============================== # アップデート作業 # =============================== echo "+--- Server Update Start ---+" | sudo tee "${MC_LOG_FILE}" echo "+--- Server Status Check ---+" | sudo tee -a "${MC_LOG_FILE}" sudo systemctl status minecraft >> "${MC_LOG_FILE}" echo "+------- Server Stop -------+" | sudo tee -a "${MC_LOG_FILE}" sudo systemctl stop minecraft >> "${MC_LOG_FILE}" echo "+--- Server Status Check ---+" | sudo tee -a "${MC_LOG_FILE}" sudo systemctl status minecraft >> "${MC_LOG_FILE}" # =============================== # バックアップとデータ移行 # =============================== # 現在のサーバーディレクトリをバックアップ # バックアップ先のディレクトリ名に日付を追加 BKUP_SERVER_DIR="${MC_BKUP_DIR}/${MC_ZIP_FILE_NO_EXT}_$(date '+%Y%m%d')" sudo mkdir -p "${BKUP_SERVER_DIR}" sudo mv "${MC_WORK_DIR}/bedrock-server" "${BKUP_SERVER_DIR}" # 新しいサーバーを配置 sudo mv "${UNZIP_DIR}" "${MC_WORK_DIR}/bedrock-server" # 必要なデータのリストア sudo cp -a "${BKUP_SERVER_DIR}/bedrock-server/worlds/" "${MC_WORK_DIR}/bedrock-server/" sudo cp -a "${BKUP_SERVER_DIR}/bedrock-server/server.properties" "${MC_WORK_DIR}/ bedrock-server/" sudo cp -a "${BKUP_SERVER_DIR}/bedrock-server/permissions.json" "${MC_WORK_DIR}/ bedrock-server/" sudo cp -a "${BKUP_SERVER_DIR}/bedrock-server/allowlist.json" "${MC_WORK_DIR}/bedrock-server/ " # =============================== # サーバ起動 # =============================== echo "+--- Server Status Check ---+" | sudo tee -a "${MC_LOG_FILE}" sudo systemctl status minecraft >> "${MC_LOG_FILE}" echo "+------ Server Start -------+" | sudo tee -a "${MC_LOG_FILE}" sudo systemctl start minecraft >> "${MC_LOG_FILE}" echo "+--- Server Status Check ---+" | sudo tee -a "${MC_LOG_FILE}" sudo systemctl status minecraft >> "${MC_LOG_FILE}" echo "+---- Server Update End ----+" | sudo tee -a "${MC_LOG_FILE}" # =============================== # 一時ディレクトリのクリーンアップ # =============================== sudo rm -rf "${UNZIP_DIR}" -
アクセス権限変更
chmod 755 /opt/minecraft/auto-* -
cron設定
00 3 * * * /opt/minecraft/auto-update.sh > /var/log/minecraft/`date '+/%Y/%m/%d'`_auto_update.log