star-code.net

Minecraft サーバーを 72 時間でリセット

はじめに

72 時間でリセットされる Minecraft サーバーを建てました

72 時間でリセットされる設計にした理由は,大きく 2 つあります.

ひとつは,トラブル防止のため. 誰でも入れる以上,完全に安全な場にはできません. でも,定期的にリセットされることで,被害が蓄積することなく,大きな問題に発展しにくくなるはずです.

もうひとつは,「いずれ消える」ということ自体がある種の魅力を持っていると感じたからです. どれだけ作っても残らないし,残せない. だからこそ,今しか味わえない偶然の景色や出会いが,少しだけ特別になる. そんな刹那的な面白さを,楽しんでもらえたら嬉しいです.

実際のところ,管理人の私自身が気まぐれなので,永続を前提にされても困りますし,管理に手がかからない形にしたかったという現実的な事情もあります.

それでも,こういうゆるい場所がこの世界のどこかにあっても,それはそれで面白いんじゃないかと思っています.

技術

スクリプトは GitHub に置いています. こちらの README に使い方などは書いているので,この記事では要素技術を説明します. なお,PaperMC を用いたサーバー構成用にスクリプトを書いているので,Minecraft 公式のサーバーに対して同様のことを行いたい場合,スクリプトを若干書き直す必要があるはずです.

スクリプトの定期実行には,cron を用いています.crontab -e で設定ができます.

スクリプトは,実行時に状態を判別して以下のように動作します.

リセット時刻の確認・生成

まず,reset_at.txt に記録されたリセット予定時刻を読み込みます. このファイルが存在しない場合は,現在から 72 時間以内で最も遠い午前 4 時を計算し,リセット時刻を保存します.

サーバーの起動チェック

次に,サーバーが現在動作しているかを screen のセッション一覧から確認します. サーバーが動いていなければ,その場で起動して終了します.(通知などはスキップされます)

残り時間の計算と通知

サーバーが動作中の場合は,リセット時刻までの残り時間を計算し,その内容を say コマンドでチャットに通知します.

リセット処理

残り時間が 0 分以下である場合,以下の手順でリセット処理が実行されます.

  • stop コマンドでサーバー停止
  • worldworld_netherworld_the_end のバックアップと削除
  • 次のリセット時刻を設定
  • サーバーを起動

バックアップ時には,Vanilla サーバーで読み込める構成に変更しています.

MOTD(サーバー一覧に表示されるメッセージ)も,次回リセット時刻を反映させるようになっています.

サーバーの起動・停止には screen を使っており,常に同じセッション名で管理しています.

おわりに

「しっかり管理された永続サーバー」ではなく,「期限付きで気軽に遊べるサーバー」を目指した設計にしたことで,プレイヤーとしても,管理者としても,気楽に関われるようにできたと信じています.

スクリプトはこちらから.

関連記事は以下.