こんにちは、ふじみや です。
以前、AWSを使ってマイクラのマルチサーバーを立ち上げる方法について紹介をしました。
しかしながら、毎回、ウェブブラウザからAWSのコンソール画面を開いてEC2インスタンスを開始し、ターミナルソフトでLinuxに接続してコマンドを入力することでサーバーを起動する、というのは手間ではないでしょうか。
そこで、今回は、EC2インスタンスを開始したらターミナルソフトでLinuxに接続することなく、「systemd」と呼ばれるものを利用して自動的にサーバーを起動する方法についてご説明します。
なお、EC2インスタンスのマシンイメージはAmazon Linux 2を前提としていますので、Ubuntuなど他のマシンイメージをご利用の方はコマンドが異なる可能性がある点についてはご注意ください。
- AWSを使ってマイクラサーバーの立ち上げる
- マインクラフトの軽量サーバー導入【PaperMC】
- ニンテンドースイッチ版マイクラでマルチサーバーに接続する方法
- Linux起動時にマイクラサーバーを自動立ち上げ【systemd】
- マイクラサーバーをバックグラウンドで自動起動【systemd & screen】 ★おすすめ
- EC2インスタンスの簡単起動【AWS CLI】
- EC2インスタンスの簡単停止
- LINEからEC2インスタンスを開始・停止させてみよう【API Gateway + Lambda】 ★おすすめ
- マイクラサーバーのワールドデータを定期バックアップ【Amazon S3】 ★おすすめ
- マイクラサーバーの自動停止【Python】 ★おすすめ
- 【Minecraft】ホワイトリスト機能を活用しよう【荒らし防止】
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】」にて省力化の方法をご説明をしていますので、そちらもぜひご覧ください。
それではまた。
コメント