導入:自動起動できても、運用はまだ不安定
前回の記事では、start.sh と systemd を使い、Ubuntu起動時にMinecraftサーバーを自動起動する構成を紹介しました。
これによって、Ubuntu起動と同時にサーバーが立ち上がるようになり、手動操作の手間は大きく減りました。
しかし、実際に運用を始めてみると、次のような課題・不満が残ります。
- サーバーのコンソールに入れない
- コマンドを直接入力できない
- 停止するときに、強制終了になっていないか不安
Minecraftサーバーは、さまざまなコマンドが用意されているため、起動して終わりではなく、コンソールを使ってコマンドを実行できるようにする必要があります。
そこで本記事では、screen を使ってサーバーのコンソールを保持し、自動起動しつつ、操作・停止もできる構成に進化させます。screen は、バックグラウンドで動作するプログラムに、あとから接続できるツールです。
また、今回の記事では、Minecraftサーバー専用のユーザーを作成する構成を前提とします。
これはセキュリティを厳密に高めるためというより、運用を安定させ、操作ミスを減らすためです。
本記事のゴールは次のとおりです。
- Ubuntu起動時にMinecraftサーバーが自動で起動する
- screen を使って、あとからコンソールに接続できる
- 停止時は stop コマンドを送る流れを作る
前回の記事で作った自動起動構成を土台に、「実際に使い続けられる運用設計」を整理していきます。
運用設計の全体像
本記事で採用するMinecraftサーバーの運用設計は、「自動起動」「操作」「停止」を一つの流れとして整理することを目的としています。
構成要素と役割は次のとおりです。
- Minecraftサーバー専用ユーザー
サーバーの実行と操作をこのユーザーに限定し、運用とトラブル対応を分かりやすくします。 - screen
Minecraftサーバーのコンソールを保持し、あとから接続して操作できる状態を作ります。 - start.sh
Minecraftサーバーの起動手順をまとめたスクリプトです。手動起動でも自動起動でも、必ずこのスクリプトを通します。 - systemd
Ubuntu起動時に start.sh を実行し、サーバーを自動起動させます。また、停止時の入口にもなります。
重要なのは、手動で起動する場合と、Ubuntu起動時の自動起動で、同じ流れになるように設計することです。今回の記事では、start.sh の中で screen セッションを作成し、その中でMinecraftサーバーを起動します。
この構成により、次のような運用が可能になります。
- Ubuntu起動時にMinecraftサーバーが自動で起動する
- 管理者は screen にアタッチして、いつでもコンソール操作ができる
- 停止時は stop コマンドを送る流れを作り、強制終了を避けられる
systemd はあくまで「起動と停止のきっかけ」を担当し、Minecraftサーバーの実体は 専用ユーザー+screen が管理する、という役割分担になります。
この考え方を前提に、以降では、
- 専用ユーザーを作成する理由と手順
- screen を前提とした start.sh の記述
- systemd 側の設定と意味
を順に整理していきます。
Minecraftサーバー専用ユーザーを作成する理由
MinecraftサーバーをUbuntu上で安定運用するためには、rootユーザーや普段使いのユーザーとは分離した「専用ユーザー」でサーバーを動かす構成が重要になります。
rootユーザーや、普段ログインに使っているユーザーのまま運用すると、あとからトラブルになりやすいポイントがいくつかあります。
理由①:セキュリティリスクを最小限に抑えるため
Minecraftサーバーは常時起動し、外部から通信を受け付けます。
もしrootユーザーでサーバーを起動していた場合、万一サーバープロセスに問題が起きると、OS全体に影響を与える権限を持ったまま実行されてしまうことになります。
専用ユーザーで起動しておけば、Minecraftサーバーがアクセスできる範囲はそのユーザーの権限内に限定され、被害や影響を最小限に抑えられます。
理由②:ファイル管理と権限トラブルを避けるため
Minecraftサーバーは、ワールドデータ・ログ・設定ファイルなどを頻繁に読み書きします。
rootや通常ユーザーと混在させると、
- ファイルの所有者が混在する
- systemd実行時に権限エラーが出る
- バックアップや移行時に整理しづらい
といった問題が起きやすくなります。
「Minecraft関連のファイルはすべて専用ユーザーのもの」という状態を作っておくことで、後々の運用・整理が非常に楽になります。
理由③:systemd・screen運用と相性が良いため
この記事では、
- systemd によるUbuntu起動時の自動起動
- screen を使ったコンソール操作
を前提とした運用を想定しています。
これらは「どのユーザーとして実行するか」が非常に重要です。
専用ユーザーを用意しておけば、
- systemdサービスの User= 指定が明確になる
- screenセッションの管理が分かりやすい
- SSH接続時の操作対象が迷わない
といったメリットがあります。
Minecraftサーバー専用ユーザーの作成手順
ここからは、Ubuntu上でMinecraftサーバー専用ユーザーを作成する手順を整理します。以下は、標準的なUbuntu環境を想定しています。
手順①:専用ユーザーを作成する
まず、Minecraftサーバー専用のユーザーを作成します。
sudo adduser minecraft
実行すると、
- パスワードの設定
- ユーザー情報(名前など)の入力
が求められます。
これらは最小限で問題ありません。
(名前などは空欄でも可)
手順②:sudo権限は付与しない
この専用ユーザーは、
- Minecraftサーバーを起動・停止する
- サーバーファイルを管理する
ことだけが目的です。
sudo権限は付与しません。
これにより、
- 誤操作によるOS全体への影響
- セキュリティリスク
を避けることができます。
手順③:専用ユーザーに切り替えて確認する
ユーザー作成後、正しく切り替えられるか確認します。
su - minecraft
プロンプトが変われば、minecraftユーザーとしてログインできています。
この状態で、
pwd
を実行し、ホームディレクトリ(/home/minecraft)にいることを確認します。
手順④:Minecraftサーバー配置場所の方針
今後、Minecraftサーバー関連のファイルは、
- /home/minecraft/ 以下にすべて配置
- ワールドデータ・start.sh・ログを集約
する構成を前提とします。
これにより、
- バックアップ対象が明確
- systemd設定がシンプル
- 他ユーザーとの混在を防止
といった運用上のメリットがあります。
※具体的なディレクトリ構成やstart.shの役割については、次のパートで整理します。
Minecraftサーバー用ディレクトリ構成とstart.shの役割
Minecraftサーバー専用ユーザーを作成したことで、サーバー関連のファイルを「どこに」「どのように」配置するかを整理できる状態になりました。
このパートでは、
- Minecraftサーバー用ディレクトリ構成の考え方
- なぜ専用ディレクトリを切るのか
- start.shを用意する理由と役割
を、運用しやすく構成する前提で整理します。
Minecraftサーバー用ディレクトリ構成の考え方
Minecraftサーバー関連のファイルは、すべて専用ユーザーのホームディレクトリ配下に集約します。ただし、/home/minecraft の直下に直接ファイルを置くのではなく、Minecraftサーバー専用のディレクトリを1段切る構成を前提とします。
基本方針は、次のとおりです。
- Minecraftサーバーに関係するものは1か所にまとめる
- ユーザーのホームとサーバーファイルの役割を分ける
- バックアップやsystemd設定を単純にする
これを踏まえ、今回は以下のような構成を想定します。
/home/minecraft/
└ minecraft-server/
├ server.jar
├ start.sh
├ eula.txt
├ server.properties
├ world/
├ logs/
※ ディレクトリ名は一例です
※ すでに運用中の環境がある場合は、無理に変更する必要はありません
なぜサーバー専用ディレクトリを作るのか
技術的には、Minecraftサーバーのファイルを /home/minecraft 直下に置いても動作します。
それでも、/home/minecraft/minecraft-server のように専用ディレクトリを切る理由があります。
/home/minecraftはユーザーのホームディレクトリminecraft-serverはMinecraftサーバー一式
と役割を分けることで、ディレクトリ構成の意味が分かりやすくなります。
また、
- バックアップ時にディレクトリ単位で扱える
- systemdのWorkingDirectoryを1か所指定できる
- 将来、テスト用や別バージョン用に増やしやすい
といった、運用面でのメリットもあります。
start.shを用意する理由
Minecraftサーバーは、java コマンドを直接実行するだけでも起動できます。しかし、運用を考えると、起動コマンドをその場で実行する構成はおすすめできません。
そこで、Minecraftサーバーの起動処理をまとめたstart.sh を用意します。
start.shを使う理由は、次のとおりです。
- 起動コマンドを1か所に集約できる
- メモリ割り当てなどの設定を後から変更しやすい
- systemdやscreenから同じ方法で起動できる
「Minecraftサーバーの起動は、必ずstart.shを使う」というルールを決めておくことで、運用時の判断ミスを減らせます。
start.shの役割
start.shの役割は、Minecraftサーバーを起動することだけです。
具体的には、
- Java実行コマンドをまとめる
- メモリサイズ(-Xms / -Xmx)を指定する
- 実行するserver.jarを明示する
といった処理を担当します。
一方で、次のような処理はstart.shには含めません。
- systemdの設定
- screenの起動や管理
- サーバー停止処理の制御
これらまでstart.shに含めると、構成が分かりにくくなり、後から修正しづらくなります。
start.shは、
- 直接実行しても
- systemd経由でも
- screen経由でも
同じ動きをする単純なスクリプトにしておくのがポイントです。
start.shの基本例
以下は、最小限のstart.shの例です。
#!/bin/bash
cd /home/minecraft/minecraft-server
java -Xms2G -Xmx4G -jar server.jar nogui
このスクリプトでは、
- 実行ディレクトリを明示的に指定
- Minecraftサーバーに割り当てるメモリを設定
- GUIを使わずに起動
という最低限の役割だけを持たせています。
実行権限の付与
start.shを作成したら、実行権限を付与します。この操作は、必ずminecraftユーザーで実行することを前提とします。
そのため、以下のような流れで進めてください。
- minecraftユーザーに切り替える
su - minecraft
- サーバーディレクトリに移動
cd /home/minecraft/minecraft-server
- 実行権限を付与
chmod +x start.sh
これにより、start.shの所有者は、minecraftユーザーとなります。
systemdとscreenを組み合わせたMinecraftサーバー運用設計
ここまでで、
- Minecraftサーバー専用ユーザー
- ディレクトリ構成
- start.shの役割
を整理してきました。
このパートでは、MinecraftサーバーをUbuntu起動時に自動起動しつつ、後から操作できる状態にするための設計を整理します。
ポイントは、
- 自動起動は systemd に任せる
- 操作(コマンド入力)は screen 経由で行う
という役割分担です。
なぜsystemdだけでは不十分なのか
systemdを使えば、Ubuntu起動時にMinecraftサーバーを自動起動できます。
しかし、systemd単体で起動した場合、
- サーバーのコンソールに入れない
- save-all や stop などのコマンドを入力できない
- 停止時の挙動が見えにくい
といった不満が残ります。
Minecraftサーバーは、起動後もコンソール操作が必要になるサーバーです。
そのため、
- 自動起動
- 手動操作
の両立が必要になります。
screenを組み合わせる理由
screenは、ターミナルセッションを維持したままバックグラウンド実行できるツールです。
Minecraftサーバーをscreen内で起動しておけば、
- SSH切断後もサーバーは動き続ける
- 後から同じセッションに再接続できる
- 通常のコンソールと同じ感覚で操作できる
といったメリットがあります。
systemdとscreenを組み合わせることで、
- Ubuntu起動時に自動でサーバーが立ち上がり
- 必要なときだけコンソールに入って操作できる
という、実運用に向いた構成になります。
全体の役割分担
ここで、各要素の役割を整理します。
- systemd
- Ubuntu起動時にMinecraftサーバーを起動する
- プロセスの監視・再起動を担当する
- screen
- Minecraftサーバーのコンソールを保持する
- SSH接続後の操作窓口になる
- start.sh
- Minecraftサーバーを起動するだけ
- 実行コマンドと設定をまとめる
それぞれの役割を分離することで、構成が分かりやすくなり、トラブル時の切り分けもしやすくなります。
systemdサービスからscreen経由で起動する考え方
この構成では、systemdが直接Minecraftサーバーを起動するのではありません。
systemdは、
- screenセッションを起動し
- その中で start.sh を実行する
という役割に徹します。
イメージとしては、次の流れです。
- Ubuntuが起動する
- systemdがサービスを起動する
- screenセッションが作成される
- screen内で start.sh が実行される
- Minecraftサーバーが起動する
これにより、
- systemd管理下で自動起動
- screen経由での手動操作
を両立できます。
systemdサービスファイルの例
以下は、Minecraftサーバー用のsystemdサービスファイルの一例です。
[Unit]
Description=Minecraft Server (screen)
After=network.target
[Service]
Type=forking
User=minecraft
WorkingDirectory=/home/minecraft/minecraft-server
ExecStart=/usr/bin/screen -dmS minecraft /home/minecraft/minecraft-server/start.sh
ExecStop=/usr/bin/screen -S minecraft -X stuff "stop$(printf \\r)"
Restart=on-failure
[Install]
WantedBy=multi-user.target
この設定では、
- minecraftユーザーとして実行
- 作業ディレクトリを明示
- screenセッション名を minecraft に固定
- stop コマンドで安全に停止
という構成になっています。
※ screenやsystemdの挙動は環境によって差が出る場合があります。
screenセッションへの接続方法
サーバー起動後、Minecraftサーバーのコンソールに接続するには、次のコマンドを使います。
screen -r minecraft
切断する場合は、
Ctrl + AD
を順に押すことで、サーバーを止めずにデタッチできます。
systemd+screen構成の運用操作まとめ
このパートでは、これまでに作成した構成を実際にどう操作・管理するかを整理します。
対象となる構成は次のとおりです。
- minecraftユーザー
/home/minecraft/minecraft-server- start.sh
- systemdサービス
- screenセッション
ここでは、「普段使う操作」だけに絞って説明します。
systemdサービスを有効化する
まず、systemdサービスを有効化します。これにより、Ubuntu起動時にMinecraftサーバーが自動で起動するようになります。
sudo systemctl daemon-reload
sudo systemctl enable minecraft.service
enable は一度実行すれば十分です。毎回行う必要はありません。
Minecraftサーバーを起動する
手動で起動したい場合は、次のコマンドを使います。
sudo systemctl start minecraft.service
正常に起動すると、
- screenセッションが作成され
- その中で start.sh が実行され
- Minecraftサーバーが起動
という流れになります。
Minecraftサーバーの状態を確認する
サービスの状態は、次のコマンドで確認できます。
sudo systemctl status minecraft.service
ここでは、
- active (running) になっているか
- エラーが出ていないか
を確認します。
※ screen内のMinecraftサーバーが起動していても、systemd側でエラーになっている場合があります。必ず両方を見る意識を持つと安心です。
screenセッションに接続する
Minecraftサーバーのコンソールに入るには、minecraftユーザーで次のコマンドを実行します。
su - minecraft
screen -r minecraft
接続できれば、通常のMinecraftサーバーコンソールと同じように操作できます。
screenからデタッチする
コンソール操作を終えたら、次のキー操作でデタッチします。
Ctrl + AD
これにより、
- Minecraftサーバーは起動したまま
- 画面だけを切り離す
状態になります。
※ exit を入力すると、サーバーを停止してしまう場合があるため注意してください。
Minecraftサーバーを安全に停止する
Minecraftサーバーを停止する場合は、systemd経由で停止する方法を推奨します。
sudo systemctl stop minecraft.service
この構成では、
- systemdがscreenに対して
stopコマンドを送信し- Minecraftサーバーが正常終了
という流れになります。
Ubuntuをシャットダウン・再起動する場合
Ubuntuをシャットダウン、または再起動するときは、
sudo shutdown -h now
や
sudo reboot
を実行するだけで問題ありません。
systemdがMinecraftサーバーを管理しているため、
- Ubuntu停止前にサービスが停止され
- Minecraftサーバーも安全に終了
する構成になっています。
ログを確認したいとき
トラブルが起きた場合は、まずsystemdのログを確認します。
journalctl -u minecraft.service
直近のログだけ見たい場合は、
journalctl -u minecraft.service -n 50
とすると便利です。
Minecraft側の詳細なログは、/home/minecraft/minecraft-server/logs/ に出力されます。
よく使う運用コマンドまとめ
最後に、よく使うコマンドをまとめます。
# サービス有効化(初回のみ)
sudo systemctl enable minecraft.service
# 起動
sudo systemctl start minecraft.service
# 停止
sudo systemctl stop minecraft.service
# 状態確認
sudo systemctl status minecraft.service
# コンソール接続
su - minecraft
screen -r minecraft
この構成でできること
この構成により、
- Ubuntu起動時にMinecraftサーバーが自動起動
- SSH切断後もサーバーは動き続ける
- 必要なときだけコンソール操作が可能
- 停止時も安全にシャットダウン
という、現実的で再現性の高い運用が可能になります。
ここまでの全体まとめ
- 専用ユーザーで権限と責務を分離
- start.shで起動処理を集約
- systemdで自動起動・監視
- screenで操作性を確保
これで、MinecraftサーバーをUbuntu上で安定運用するための一連の設計が完成です。

