Ubuntu20.04のMinecraftサーバーで起動コマンドをサービス化する
概要
前回の記事の続きです。
前回の記事では、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