PR

UbuntuでMinecraftサーバーを安定運用するstart.shを使った一段上の自動起動構成(systemd対応)

Minecraftサーバーをsystemdで自動起動するためのスクリプトのイメージ Ubuntu
この記事は約13分で読めます。
記事内に広告が含まれています。
スポンサーリンク

UbuntuでMinecraftサーバーを運用する上で、
「OS起動時にMinecraftサーバーも自動で起動する」設定は、
systemdを使えば、それほど難しくありません。

実際、前回の記事では
「Ubuntu起動時にMinecraftサーバーを自動起動する」
という最低限の構成について紹介しました。

しかし、Minecraftサーバーは、
単に起動さえすれば良いわけではありません。

・管理者としてコマンドを入力したい
・安全に停止したい
・意図しない終了を防ぎたい
・ログや状態を把握したい

こうしたサーバー運用上の操作が、日常的に必要になります。

前回の記事で紹介した単純な自動起動構成では、
起動はできるものの、
日常的な運用を考えると、管理しづらい構成でした。

そこで本記事では、
start.sh を使ってサーバー起動を整理し、
systemd と組み合わせることで、

単なる自動起動から一歩進んだ、
一段上の“安定運用構成”を作る方法
を解説します。

ここで言う、「安定運用」とは、
起動・停止・管理を無理なく行える状態を指しています。

これは、
小規模・個人運用のMinecraftサーバーを
現実的な手間とコストで、継続的に運用できる構成です。

次は、なぜ「直接javaコマンドをsystemdに書く」構成から一歩進め、
start.sh を使った構成を考える必要があるのか、その理由を整理していきます。

なぜ start.sh を使うのか(考え方)

前回の記事では、Minecraftサーバーを systemd で自動起動させるために、java -jar server.jar といった起動コマンドを、そのまま service ファイルに記述しました。この方法はシンプルで、「とにかく自動起動させたい」という目的に対しては、十分に機能します。

しかし、Minecraftサーバーを日常的に運用していくと、この構成では扱いづらいと感じてきます。

まず問題なのが、起動処理と運用処理をまとめて systemd で管理していることです。起動コマンド、メモリ割り当て、オプション指定など、本来はサーバー側の都合で調整したい内容を service ファイルの中に直接書いているため、設定を変えるには systemd 側を編集する必要が出てきます。

また、Minecraftサーバーは「起動して終わり」ではなく、管理者がコンソールからコマンドを入力したり、意図したタイミングで安全に停止したりする場面が多くあります。しかし、java コマンドを直接 systemd で実行している構成では、通常のターミナルからサーバーに対して直接コマンドを入力する、といった操作ができません

そこで、「起動処理」と「サービス管理」を分離する方法を取ります。Minecraftサーバーそのものの起動方法やオプション管理は start.sh にまとめ、OS起動時の自動実行や再起動制御といった役割は systemd に任せる、という役割分担です。

start.sh は、人間が手動で実行しても、systemd から呼び出されても、同じ手順でMinecraftサーバーを起動できるスクリプトになります。これにより、手動起動と自動起動の差がなくなり、起動方法を一つに集約できます。

この構成にすることで、起動オプションの調整がしやすくなり、systemd 側の設定もシンプルになります。重要なのは、これは構成を複雑にするためではなく、日常的な運用を無理なく続けるための整理だという点です。

次は、この start.sh をどのように作成し、Minecraftサーバーの起動処理をどのように整理していくのかを、具体的に見ていきます。

start.sh を作成する(実践)

ここからは、Minecraftサーバーの起動処理をまとめる start.sh を実際に作成していきます。最初は、「手動で実行してサーバーが起動できる状態」をゴールにします。

作業は、Minecraftサーバーのファイル(server.jar など)が置かれているディレクトリで行います。以降のコマンドは、すべてそのディレクトリで実行してください。

start.sh ファイルを作成する

最初に、起動用スクリプトとなる start.sh ファイルを作成します。
ここでは nano エディタを使いますが、普段使っているエディタがあれば置き換えても問題ありません。

nano start.sh

シェルスクリプトとしての基本を記述する

ファイルを開いたら、最初に シェバン を記述します。これにより、このファイルを Bash スクリプトとして実行できるようになります。シェバン(shebang)は、スクリプトの先頭に書く#! から始まる特別な行のことで、このスクリプトをどのプログラム(インタプリタ)で実行するかをOSに伝える仕組みのことです。

#!/bin/bash

Minecraftサーバーの起動コマンドを書く

次に、Minecraftサーバーを起動するための java コマンドを書きます。ここでは一例として、メモリ割り当てを指定した基本的な起動コマンドを記述します。

java -Xms2G -Xmx4G -jar server.jar nogui
  • メモリ量(Xms / Xmx)
  • jar ファイル名

は、自分の環境に合わせて調整してください

start.sh の中身(例)

ここまで書いた内容をまとめると、start.sh は次のようになります。

#!/bin/bash

java -Xms2G -Xmx4G -jar server.jar nogui

このファイルが、Minecraftサーバーの起動方法をすべてまとめた場所になります。

実行権限を付与する

作成した start.sh は、そのままでは実行できません。次のコマンドで実行権限を付与します。

chmod +x start.sh

この作業を忘れると、後で systemd から呼び出した際にエラーになるため、必ず行ってください。

start.sh を手動で実行して確認する

次に、start.sh を直接実行して、Minecraftサーバーが起動するか確認します。

./start.sh

これまでと同じようにサーバーが起動し、ログが表示されれば問題ありません。

この時点で、

  • サーバーが正常に起動する
  • コンソールにログが表示される

ことを確認できれば、start.sh の作成は成功です。

ここまでで何が変わったのか

ここまでの作業で、Minecraftサーバーの起動処理は start.sh に一本化されました。

今後、

  • メモリ量を変えたい
  • 起動オプションを調整したい

といった場合は、systemd の設定ではなく、この start.sh だけを編集すれば済みます。

次は、この start.sh を systemd から呼び出すように設定し、Ubuntu起動時の自動起動と、安定したサービス管理を両立させていきます。

systemd から start.sh を呼び出す

ここからは、前段で作成した start.sh を、Ubuntu起動時に自動実行するよう設定します。
ここでの目的は、systemd に Minecraftサーバーの起動を任せることです。

systemd に任せる役割を整理する

systemd に任せるのは、「Ubuntu起動時に Minecraftサーバーを自動で起動するか」「サーバーが落ちたときに再起動するか」といった、OS側のサービス管理です。Minecraftサーバーをどう起動するか、という処理は start.sh にまとめています。

そのため、systemd の設定はできるだけシンプルにします。

serviceファイルを作成する

まず、systemd の serviceファイルを作成します。
ファイル名は分かりやすく、minecraft.service とします。

sudo nano /etc/systemd/system/minecraft.service

serviceファイルの基本構成を書く

開いたファイルに、以下の内容を記述します。
ここでは、start.sh を直接実行する構成にしています。

[Unit]
Description=Minecraft Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/ユーザー名/minecraft
ExecStart=/home/ユーザー名/minecraft/start.sh
Restart=on-failure
User=ユーザー名

[Install]
WantedBy=multi-user.target
  • WorkingDirectoryExecStart は、自分の環境に合わせてパスを修正してください
  • systemd では相対パスではなく、必ず絶対パスを指定してください
  • User には、Minecraftサーバーを実行するユーザー名を指定します

各項目の意味を簡単に確認する

ここでは、最低限押さえておきたい項目だけ確認します。

  • WorkingDirectory
    start.sh を実行するディレクトリを指定します
  • ExecStart
    実行するコマンドとして start.sh を指定します
  • Restart=on-failure
    異常終了した場合のみ、自動で再起動します

細かい systemd の設定は、必要になってから調整すれば問題ありません。

systemd に設定を反映する

serviceファイルを保存したら、systemd に設定を読み込ませます。

sudo systemctl daemon-reload

このコマンドを忘れると、新しく作成した serviceファイルが認識されません。

自動起動を有効にする

次に、Ubuntu起動時に Minecraftサーバーが自動で起動するよう設定します。

sudo systemctl enable minecraft.service

この時点では、まだサーバーは起動していません。

service を手動で起動して確認する

設定が正しいか確認するため、一度 service を手動で起動します。

sudo systemctl start minecraft.service

問題がなければ、Minecraftサーバーが起動し、ログが出力されます。

起動状態を確認する

サーバーが正しく動いているかは、次のコマンドで確認できます。

sudo systemctl status minecraft.service

active (running) と表示されていれば、正常に起動しています。

ここまでで何ができるようになったか

ここまでの設定で、

  • Ubuntu起動時に Minecraftサーバーが自動起動する
  • 起動処理は start.sh に集約されている
  • systemd はサービス管理だけを担当している

という構成が完成しました。

停止と再起動について

Minecraftサーバーの停止や再起動は、systemd のコマンドで行います。

sudo systemctl stop minecraft.service
sudo systemctl restart minecraft.service

これにより、OSの管理として、サーバーを安全に停止・再起動できます。

次は、この構成を使った日常的な運用のポイント や、「コンソール操作をどうするか」といった実践的な話題を整理していきます。

この構成での運用ポイント(起動・停止・管理)

この章では、ここまで作成したstart.sh+systemd 構成を、日常的にどう使っていくかという視点で整理します。設定そのものよりも、「普段は何を触るのか」「どこを意識すればよいか」を中心に説明します。

基本的な起動と停止の考え方

この構成では、Minecraftサーバーの起動と停止は、systemd のコマンドを使うのが基本になります。Ubuntuの起動時には systemd によって自動的にサーバーが起動し、手動で操作したい場合も、systemd 経由で制御します。

サーバーを起動する

すでに自動起動が有効になっていれば、通常は手動で起動する必要はありません。

必要に応じて手動で起動する場合は、次のコマンドを使います。

sudo systemctl start minecraft.service

サーバーを停止する

Ubuntuをシャットダウンする前や、メンテナンスを行いたい場合は、systemd 経由でサーバーを停止します。

sudo systemctl stop minecraft.service

この方法で停止すれば、OS側の管理として Minecraft サーバーを終了させることができます。

サーバーを再起動する

設定変更後など、一度サーバーを再起動したい場合は、次のコマンドを使います。

sudo systemctl restart minecraft.service

停止と起動をまとめて行えるため、運用中によく使うコマンドになります。

start.sh は「起動方法の定義」として扱う

この構成では、Minecraftサーバーの起動方法は start.sh に集約されています。

メモリ割り当てを変更したい場合や、起動オプションを調整したい場合は、systemd の service ファイルではなく、start.sh を編集します。

これにより、

  • 起動設定を見る場所が一つになる
  • systemd の設定を頻繁に触らなくて済む

という状態を保てます。

systemd の service ファイルは基本的に触らない

service ファイルは、「Ubuntu起動時にどう扱うか」を決めるための設定です。一度安定したら、日常運用で頻繁に編集する必要はありません。start.sh と service ファイルの役割を分けて考えることが、この構成を楽に使い続けるポイントです。

ログと状態の確認

サーバーの状態を確認したい場合は、systemd の status コマンドを使います。

sudo systemctl status minecraft.service

起動しているかどうか、エラーが出ていないかを確認する際の基本になります。

この構成のメリットを振り返る

ここまでの構成によって、

  • 起動方法は start.sh に集約
  • 自動起動・再起動は systemd が管理
  • 日常操作は systemctl コマンドで統一

という、シンプルで見通しの良い運用ができるようになりました。これは、大規模なサーバー向けの構成ではなく、個人・小規模運用で無理なく使い続けるための構成です。

次は、この構成をベースにして、

  • コンソール操作をどう行うか
  • screen / tmux を使う場合の考え方
  • さらに一段安定させたい場合の方向性

といった 発展的な話題 を整理します。

コンソール操作と今後の拡張(発展編)

ここまでで、start.sh と systemd を使ったMinecraftサーバーの安定した自動起動構成が完成しました。最後に、「この先、どう拡張していけるか」という視点で、いくつかのポイントを整理します。

コンソール操作について考える

Minecraftサーバーの運用では、管理者としてコマンドを入力したくなる場面があります。

たとえば、

  • /stop を実行して安全に終了したい
  • /save-all を手動で実行したい
  • プレイヤーの状況を確認したい

といった場合です。systemd 経由で起動したサーバーは、通常のターミナルから直接コンソール操作を行うことはできません。

screen や tmux を使うという選択肢

コンソール操作をしたい場合、screentmux といったツールを使う方法があります。

これらを使うと、

  • サーバーをバックグラウンドで起動できる
  • 後からコンソールに再接続できる

といった運用が可能になります。ただし、systemd と screen / tmux を組み合わせる構成は、少し複雑になります。

無理に導入しなくてもよい理由

この記事で紹介した構成は、「自動起動+安定運用」を主目的にしています。

個人・小規模運用であれば、

  • OS起動時に自動で立ち上がる
  • 落ちたら再起動する
  • 停止や再起動は systemctl で行う

というだけでも、十分に実用的です。最初から screen や tmux を組み込まなくても、困ってから検討すれば問題ありません。

start.sh を拡張していく方向性

start.sh は、Minecraftサーバーの起動処理をまとめた場所です。

今後、

  • 起動前にログ出力を行う
  • 実行ユーザーや環境変数を整理する
  • 起動時のチェック処理を入れる

といった拡張を行う場合も、この start.sh にまとめていくことになります。構成の中心が一つに決まっているため、拡張しても見通しが悪くなりにくいのが利点です。

systemd 側でできる追加設定

systemd には、

  • 停止時の処理を指定する
  • 再起動条件を細かく制御する
  • 起動順序を調整する

といった設定もあります。

ただし、これらは「必要になったら調べる」で十分です。最初からすべて設定しようとすると、構成が重くなってしまいます。

この構成の考え方を振り返る

今回の構成で大切にしたのは、

  • 起動方法は start.sh にまとめる
  • OSとしての管理は systemd に任せる
  • 役割を分けて、触る場所を減らす

という点でした。

これは、Minecraftサーバーに限らず、他の常駐アプリケーションにも応用できます。

まとめ:一段上の「安定運用」へ

start.sh と systemd を組み合わせることで、単なる自動起動ではなく、「使い続けられる構成」を作ることができました。

必要になったら拡張でき、普段はシンプルに使える。それが、個人運用のMinecraftサーバーにとって、ちょうどよいバランスだと思います。

コンソール操作が必要になった場合は、screen や tmux を使った運用方法もあります。
これについては、別の記事で詳しく紹介する予定です。

タイトルとURLをコピーしました