Minecraftサーバーで自動再起動を行う

プラグインとかもあったけど、cronでスクリプト実行するほうがシンプルで簡単そうだったのでやってみた。

こちらを参考に、でもここにある通りだとうまく動かなかったので、多少手を入れてます。

qiita.com

# ------------設定箇所---------------
# 再起動までの待機時間(秒)
WAIT=60

# screenの名前
SCREEN_NAME=Minecraft

# ---------------------------------

# 15分前からsayコマンドで予告メッセージを出していく
screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 15分後にサーバーを再起動します\015"'
sleep 300

screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 10分後にサーバーを再起動します\015"'
sleep 300

screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 5分後にサーバーを再起動します\015"'
sleep 120

screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 3分後にサーバーを再起動します\015"'
sleep 120

screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 1分後にサーバーを再起動します\015"'
sleep 30

screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 30秒後にサーバーを再起動します\015"'
sleep 20

screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 10秒後にサーバーを再起動します\015"'
sleep 5

screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 5秒後にサーバーを再起動します\015"'
sleep 1

screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 4秒後にサーバーを再起動します\015"'
sleep 1

screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 3秒後にサーバーを再起動します\015"'
sleep 1

screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 2秒後にサーバーを再起動します\015"'
sleep 1

screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say 1秒後にサーバーを再起動します\015"'
sleep 1

# いざstopコマンド実行!
screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "stop\015"'

# 指定した秒数待機
sleep $WAIT

# 起動スクリプトがあるディレクトリに移動して、いざ起動!
screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "cd minecraft-spigot_1.19.4"\015'
screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "./Minecraft_start.sh\015"'

ひたすらscreenに干渉してコマンドを投げていくだけです。
ちゃんと作るならコマンドの結果とかチェックしたい感じ。
特にstopのあと、単に60秒WAITするんじゃなくて、stopが終わったのを確認してstartできたらなーと思ったり。

このスクリプトをcronに登録してあげます。

mstudy-diary.hatenablog.com

無事、毎日8時半に再起動が行われるようになりました。
めでたしめでたし。