⛏️

Ubuntu20.04のMinecraftサーバーで起動コマンドをサービス化する

2022/06/02に公開

概要

前回の記事の続きです。

前回の記事では、Ubuntu 20.04にPaperMCを導入し、Minecraftクライアントからアクセスできるところまでの手順を解説しました。
今回は、minecraftの起動コマンドをサービス化し、サーバー再起動時に自動実行されるようにする手順についてまとめます。

手順

シェルスクリプトを作成

カレントディレクトリをpaper-1.18.2-341.jarが置いてあるディレクトリに変更し、run.shファイルを作成します。

$ vi run.sh

ファイルの中身は以下の通りです。
jarの起動オプションや他のコマンド等は適宜設定してください。今回は必要最低限のものだけ書いておきます。

#!/bin/sh
java -jar paper-1.18.2-341.jar

サービス化

定義ファイルを作成

サービスの定義ファイルを作成します。

$ sudo vi /lib/systemd/system/minecraft.service

ファイルの中身は以下の通りです。
ここも必要最低限の定義だけ書いておきます。

[Unit]
Description=minecraft

[Service]
Type=forking
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/minecraft
ExecStart=/home/ubuntu/minecraft/run.sh
Restart=always

[Install]
WantedBy=multi-user.target

補足

Description:サービスの説明文。

Type:サービス起動完了の判定方法。
デフォルトは"simple"(プロセスが起動した時点で完了とする)ですが、今回は"forking"(フォークして親プロセスが終了したら完了とする)とします。
User、Group:実行ユーザーとグループ。
WorkingDirectory:作業ディレクトリ。今回はとりあえずrun.shが置いてあるディレクトリを指定しておきます。
ExecStart:実行するシェルスクリプトのフルパス。
Restart:サービスプロセス停止後の再起動条件を指定。"always"にしておくと常に再起動されます。

WantedBy:OSがどのランレベルの時にサービスを起動するかの設定。
今回指定した"multi-user.target"は、GUI無しのマルチユーザーモード。デフォルトのランレベルはこれのはず。

サービスを有効化

現在のサービスの設定を確認します。

$ sudo systemctl list-unit-files --type=service | grep minecraft
minecraft.service                                          disabled        enabled

サービスを有効化します。

$ sudo systemctl enable minecraft
Created symlink /etc/systemd/system/multi-user.target.wants/minecraft.service → /lib/systemd/system/minecraft.service.

サービスの設定を再確認します。

$ sudo systemctl list-unit-files --type=service | grep minecraft
minecraft.service                                          enabled         enabled

これでサービスの有効化は完了です。

確認のため再起動

試しにOSを再起動してみます。

$ sudo shutdown -r now

再起動完了後、サービスの状態を確認します。

$ sudo systemctl status minecraft

以下のようなステータスと、Minecraftの起動ログが出力されていれば問題ありません。

● minecraft.service - minecraft
     Loaded: loaded (/lib/systemd/system/minecraft.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-05-23 23:12:35 JST; 3min 35s ago
   Main PID: 911 (run.sh)
      Tasks: 37 (limit: 28705)
     Memory: 1.9G
     CGroup: /system.slice/minecraft.service
             tq911 /bin/sh /home/ubuntu/minecraft/run.sh
             mq928 java -jar paper-1.18.2-341.jar

May 23 23:12:47 minecraft run.sh[928]: [23:12:47 INFO]: Preparing level "world"
May 23 23:12:53 minecraft run.sh[928]: [23:12:53 INFO]: Preparing start region for dimension minecraft:overworld
May 23 23:12:54 minecraft run.sh[928]: [23:12:54 INFO]: Time elapsed: 318 ms
May 23 23:12:54 minecraft run.sh[928]: [23:12:54 INFO]: Preparing start region for dimension minecraft:the_nether
May 23 23:12:54 minecraft run.sh[928]: [23:12:54 INFO]: Time elapsed: 147 ms
May 23 23:12:54 minecraft run.sh[928]: [23:12:54 INFO]: Preparing start region for dimension minecraft:the_end
May 23 23:12:54 minecraft run.sh[928]: [23:12:54 INFO]: Time elapsed: 127 ms
May 23 23:12:54 minecraft run.sh[928]: [23:12:54 INFO]: Running delayed init tasks
May 23 23:12:54 minecraft run.sh[928]: [23:12:54 INFO]: Done (7.153s)! For help, type "help"
May 23 23:12:54 minecraft run.sh[928]: [23:12:54 INFO]: Timings Reset

Discussion