Linux 起動時にマイクラサーバーを自動立ち上げ【systemd】

当ページのリンクには広告が含まれています。
stainless steel close wrench on spanner

こんにちは、ふじみや です。

以前、AWSを使ってマイクラのマルチサーバーを立ち上げる方法について紹介をしました。

しかしながら、毎回、ウェブブラウザからAWSのコンソール画面を開いてEC2インスタンスを開始し、ターミナルソフトでLinuxに接続してコマンドを入力することでサーバーを起動する、というのは手間ではないでしょうか。

そこで、今回は、EC2インスタンスを開始したらターミナルソフトでLinuxに接続することなく、「systemd」と呼ばれるものを利用して自動的にサーバーを起動する方法についてご説明します。

自動化の範囲

なお、EC2インスタンスのマシンイメージはAmazon Linux 2を前提としていますので、Ubuntuなど他のマシンイメージをご利用の方はコマンドが異なる可能性がある点についてはご注意ください。

目次

systemdとは

ざっくりと説明をすると、systemdとはLinuxの起動処理やシステム管理を行う仕組みのことです。

この仕組みを利用することで、Linux起動時(EC2インスタンス開始時)にsystemdに登録された処理(サービス)が自動的に行われるようになります。

systemdへのサービス登録

それでは、早速やっていきましょう。

Unitファイルの作成

まずは、デフォルトのユーザー(ec2-user)からルートユーザー(root user)に切り替えましょう。ルートユーザーはLinuxの全ての管理権限を有するユーザーのことで、スーパーユーザーとも言います。

sudo su

特定のディレクトリ(/etc/systemd/system/)内にUnitファイルを作成することで、systemdを利用できるようになります。ここではUnitファイルの名前は「minecraft.service」としていますが、「.service」の前はお好きな名称を入力いただいて問題ありません。

vim /etc/systemd/system/minecraft.service

なお、Unitファイルを作成する場所は通常Linuxにログインした際に表示されるホームディレクトリ(/home/ec2-user)の下ではなく、ルートディレクトリ直下の「etc」ディレクトリの更に下となります。

ディレクトリ構造

また、上記のやり方でルートユーザーに切り替えずとも、以下のようなコマンドを入力することで、ルートユーザーとしてファイルを作成することも可能ですので、お好きな方をご利用ください。

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

Unitファイルの内容

Unitファイルの内容は以下の通りに記述してください。

[Unit]
#このUnitファイルの説明をDescriptionにて記載。
Description=launch minecraft spigot server
After=network-online.target

[Service]
#実行するユーザーを指定(指定がないとルートユーザーとして実行することになります)
User=ec2-user

#作業するディレクトリを指定(これをしないと「EULAに同意してください」と無限にエラーが出ます)
WorkingDirectory=/home/ec2-user/minecraft

#このサービスとして実行するコマンドの内容
ExecStart=/bin/bash /home/ec2-user/minecraft/start.sh

#サービス停止時の動作(always=常に再起動、on-failure=起動失敗時のみ再起動)
Restart=always

#起動に時間がかかることによる失敗を避けるため、タイムアウト値を設定
TimeoutStartSec=180

[Install]
WantedBy = multi-user.target

編集が終了しましたら、ユーザーを元に戻しておきましょう。sudoコマンドを付けてファイルを作成した場合には、こちらは不要です(入力するとログアウトしてしまいます。)。

exit

実行対象となるstart.shの詳細については過去記事をご覧ください。

systemdからの読み込みと登録

Unitファイルの作成後は、以下を入力してsystemdからUnitファイルを読み込みましょう。

sudo systemctl daemon-reload

また、「minecraft.service」の自動起動も有効にしておきましょう。

sudo systemctl enable minecraft.service

これで設定は完了です。

起動の確認

それでは、ちゃんと動くか確認をしてみましょう。次のコマンドを入力しましょう。

sudo systemctl start minecraft.service

次に以下を入力して起動の状況を確認しましょう。

systemctl status minecraft.service

問題がなければ「Active: active (running)」という表示が出ているはずです。「Active: activating (start)」となっている場合には、起動中ですのでしばらく経ってから再度コマンドを入力すると「Active: active (running)」に変わっているはずです。

もし、「Active: failed」となっていましたら、エラー文章を確認するようにしましょう。もし、エラーの内容が途中で切れてしまっている場合には、次を入力して全文表示させることが可能です。

systemctl status -l minecraft.service

もし、「jarファイルが見つかりません」といった趣旨のエラーが出た場合には、start.sh内に記載されているjarファイルの場所を具体的にしてあげることで修正できます。

java -Xmx2G -Xms2G -jar /home/ec2-user/minecraft/<サーバーファイル名(spigot-1.19.2.jar等)> nogui

まとめ

今回はsystemdを活用したサーバーの自動起動について説明をさせていただきました。

これで、マイクラのマルチプレイをしようとする都度、ウェブブラウザを開いてAWSにログインの上EC2インスタンスを立ち上げて、Linuxに接続し、コマンドを入力、という流れの半分を省力化させることができるようになります。

残りの半分については「EC2インスタンスの簡単起動【AWS CLI】」にて省力化の方法をご説明をしていますので、そちらもぜひご覧ください。

それではまた。

stainless steel close wrench on spanner

この記事が気に入ったら
フォローしてね!

コメント

コメントする

目次