Last active
September 5, 2016 13:20
-
-
Save shuymn/80d2216241916e81a3bb35add07a91f6 to your computer and use it in GitHub Desktop.
マイクラの鯖の再起動用スクリプト
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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