Skip to content

Instantly share code, notes, and snippets.

@shuymn
Last active September 5, 2016 13:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shuymn/80d2216241916e81a3bb35add07a91f6 to your computer and use it in GitHub Desktop.
Save shuymn/80d2216241916e81a3bb35add07a91f6 to your computer and use it in GitHub Desktop.
マイクラの鯖の再起動用スクリプト
#!/bin/bash
# 値が設定されていない変数を参照した場合にエラーメッセージを表示してスクリプトを終了する
set -u
# 変数定義
HOME='/home/hoge'
SCRIPT_START='/home/hoge/script/foo.sh'
DIR_TMP='/home/foo/bar'
TIMESTAMP=$(date +%Y%m%d)
# "spigot"を含むプロセスのヒット数
# 参考: http://www.mk-mode.com/octopress/2013/08/22/shellscript-check-ps/
COUNT_SPIGOT='ps ax | grep spigot | grep -v grep | wc -l'
# "spigot"を含むプロセスがあったらspigotを終了させる
if [ `eval $COUNT_SPIGOT` = 0 ]; then
echo "minecraftサーバは停止しています。バックアップに移行します"
else
echo "minecraftサーバを停止させます"
screen -d -R piyo -X stuff 'say 1分後にサーバーを再起動します^M' # ← ^M は C-v + C-M で入力できます
screen -d -R piyo -X stuff 'say 約5-10分後に再接続可能になりますので、しばらくお待ち下さい^M'
sleep 30s
screen -d -R piyo -X stuff 'say 30秒後にサーバーを再起動します^M'
screen -d -R piyo -X stuff 'say 約5-10分後に再接続可能になりますので、しばらくお待ち下さい^M'
sleep 15s
screen -d -R piyo -X stuff 'say 15秒後にサーバーを再起動します^M'
screen -d -R piyo -X stuff 'say 約5-10分後に再接続可能になりますので、しばらくお待ち下さい^M'
sleep 15s
screen -d -R piyo -X stuff 'stop^M'
wait
if [ `eval $COUNT_SPIGOT` = 0 ]; then
echo "minecraftサーバの停止が完了しました"
else
echo "minecraftサーバの停止に失敗しました"
exit 1
fi
fi
# trapと最後の起動に使う鯖起動用関数を用意
function server_start () {
echo 'minecraftサーバを開始します'
if [ `eval $COUNT_SPIGOT` = 0 ]; then
echo '10秒後に起動を開始します'
sleep 10s
screen -R -d piyo -p 0 -X stuff "${SCRIPT_START}^M"
wait
echo '起動を完了しました'
else
echo 'minecraftサーバの起動に失敗しました'
fi
}
# ワールドのバックアップ
## 作業用ディレクトリがなかったら作る
if [ ! -d ${DIR_TMP}/worlds ]; then
mkdir -p ${DIR_TMP}/worlds
echo "作業用ディレクトリがなかったので作りました"
fi
echo "コピーを開始します"
find ${HOME}/minecraft -maxdepth 1 -name 'world*' -type d | xargs -I{} basename {} | xargs -I{} rsync -arhvP --delete ${HOME}/minecraft/{} ${DIR_TMP}/worlds/
wait
if [ $? = 0 ]; then
echo "コピーに成功しました"
else
echo "コピーに失敗しました"
exit 1
fi
# ワールドのアップロード
echo "アップロードを開始します"
gsutil -m rsync -r ${DIR_TMP}/worlds/ gs://piyo/fuga/${TIMESTAMP}/
wait
if [ $? = 0 ]; then
echo "アップロードに成功しました"
else
echo "アップロードに失敗しました"
exit 1
fi
echo "サーバーの起動を開始します"
server_start
wait
if [ $? = 0 ]; then
echo "サーバーの起動に成功しました"
exit 0
else
echo "サーバーの起動に失敗しました"
fi
# 異常終了したときのため
trap 'server_start' ERR
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment