先日のこれを、以下の記事で書いている通りプラグインとの抱き合わせでちゃんと作った。
プレイヤー死亡時にspigotのサーバーログlatest.logにキーワードを出力するプラグインを設置し、
スクリプトでそれを拾って再生成操作を行う。
プラグインはこちら。
スクリプトはこちら。パスはご自由に。
#!/bin/sh # ------------設定箇所------------- # screenの名前 SCREEN_NAME=Minecraft # ワールド名 WORLD_NAME=HARDCORE_WORLD #ワールドパス WORLD_PASS=minecraft-spigot #バックアップワールドパス BK_WORLD_PASS=bk_minecraft-spigot #スクリプトログパス SCRIPT_LOG=logs/shellresult.log SCRIPT_LOG_NUMBER=numberOfPlayears.log #マイクラログパス SPIGOT_LOG=${WORLD_PASS}/logs/latest.log # --------------------------------- echo START >> ${SCRIPT_LOG} #二重起動チェック pid=`pgrep -ox newWorld.sh` mypid="$$" if [ ${mypid} != ${pid} ]; then echo notMyPID >> ${SCRIPT_LOG} exit fi echo shellStart >> ${SCRIPT_LOG} #死亡確認。これがプラグインから吐かれるキーワード isDeath=`grep -q "PLAYERDEATH\!" ${SPIGOT_LOG} && echo OK` #サーバー停止中かどうか。 #サーバーを再起動するごとにlatest.logはリフレッシュされるが、タイミングによってリフレッシュ前に当シェルが動いてしまわないため isNotStopping=`grep -q "Stopping the server" ${SPIGOT_LOG} && echo NG` #死亡したプレイヤーが存在してサーバー停止中じゃない場合 if [ "${isDeath}" = "OK" ] && [ "${isNotStopping}" != "NG" ]; then #人数チェック echo checkPlayears >> ${SCRIPT_LOG} screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "list\015"' grep 'There are . of' ${SPIGOT_LOG} | tail -n 1 > ${SCRIPT_LOG_NUMBER} isNoPlayears=`grep -q 'There are 0 of' ${SCRIPT_LOG_NUMBER} && echo OK` if [ "${isNoPlayears}" = "OK" ]; then #0人だったらワールド再生成 #人数チェックをしないと、1人死んだあと他のメンバーが遊んでいても問答無用でサーバーが止められて余韻がないので・・ echo createNewWorld >> ${SCRIPT_LOG} screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "stop\015"' mv ${SCRIPT_LOG_NUMBER} ${SCRIPT_LOG_NUMBER}.`date "+%Y%m%d_%H%M%S"` sleep 30 #ワールドディレクトリを無理矢理削除してしまうので、丸ごとコピーしておく cp -r ${WORLD_PASS} ${BK_WORLD_PASS} rm -rf ${WORLD_PASS}/${WORLD_NAME} rm -rf ${WORLD_PASS}/${WORLD_NAME}_nether rm -rf ${WORLD_PASS}/${WORLD_NAME}_the_end #削除後に再起動 screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "cd minecraft-spigot"\015' screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "./Minecraft_start.sh\015"' #コピーしたバックアップデータをzip化しておく。容量がきついので zip ${BK_WORLD_PASS}.`date "+%Y%m%d_%H%M%S"`.zip ${BK_WORLD_PASS} rm -rf ${BK_WORLD_PASS} echo success >> ${SCRIPT_LOG} fi fi