はじめに
今回記事を書くのが初めて。
Markdownとか普段触らなくなってしまってよく分からないなりに頑張って書くので許してくだちぃ。(ネットワークエンジニア・25歳・男性)
概要
身内でマイクラやろうってなった時にMOD入マイクラ鯖(Forge)を立てたはいいけど自動バックアップやら自動再起動(OSもサービスも)したいよねってなった時の話。
おさらいも兼ねてここに残しておこうかなと。
(突然命令口調で書いてあったりするけど、それは自分に向けてなので許して。)
そもそもとして
なんで残そうと思ったかって言うと、MOD入り鯖の作り方みたいなサイトはあるけども、鯖を常時起動させる設定はscreen使いましょうって言ってるとこまではいいんだけど、OS自体の再起動とかしたときに結局自分でscreen使って実態ファイル叩き起こしてあげないと復旧にならないじゃんって言うようなページしかなかったんだよね。
リフレッシュを兼ねて自動バックアップしたらOSも一回再起動して、OS起動時にマイクラ鯖サービスも起動してほしいなって僕は思ったのでそのメモ。
構成
-
OS
CentOS Linux release 7.9.2009
因みにConoHa VPSを使ってみた(CentOS8系にしなかったのは僕がまだ8系の細かい所知らなかったから)
今回遊ぶのはバニラじゃないのでMinecraftオプションは付けていない。(そもそもバニラ鯖ならココに記事は残してないと思う) -
マイクラバージョン
1.17.1 Forge
とりあえず最初の構築から
参考サイトは以下
- 【失敗しない】ConoHa VPSでマイクラMODサーバーを立てる方法
-
https://sukiburo.jp/setup-conoha-vps-mod/
↑ココにあるようにバージョン1.16まではサーバーファイルがjarだったんだけど、1.17からrun.shってファイルに置き換わったんだよね。
-
https://sukiburo.jp/setup-conoha-vps-mod/
ここは本題ではないのでサクッとscreenで起動できるとこまで来たとして。
因みにインストールディレクトリは 「/usr/local/games/minecraft/」 を想定。
1.OS再起動しても自動で鯖が開始してほしい
なのでサーバーファイル(run.sh)をOS起動時にscreenから実行するseviceを作る。
OS起動時に実行するって検索すると「rc.local」でのやり方とか出てくるけど絶対これでやるな。(戒め)
互換性のためとか云々で残っているサービスだけど、systemd(推奨)に置き換わってるので特段理由がなければ素直にsystemdを使う。
ってことでsystemdに追加します。
1-1.必要なファイル
\ | ファイル名 | 詳細 |
---|---|---|
1 | /etc/systemd/system/~~~.service | 「~~~」の所は自分で好きなファイル名にしてもろて。 今回僕は適当に「minecraftserver.service」。 |
1-2.~~~.serviceの内容
[Unit]
Description=Minecraft server start
After=network.target
[Service]
User=root
WorkingDirectory=/usr/local/games/minecraft/
ExecStart=/bin/sh -c '/usr/bin/screen -DmS minecraft sh run.sh'
ExecReload=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "reload"\\015'
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "save-all"\\015'
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "stop"\\015'
[Install]
WantedBy=multi-user.target
一応設定内容の説明をすると_
※有識者の方僕の説明間違ってたらごめんなさい。
\ | オプション | 詳細 |
---|---|---|
[Unit] | Description | Unitの説明 |
After | このUnitより先に起動するUnit(今回コレいるかワカンネ) | |
[Service] | User | どのユーザでの実行権限でやるか |
WorkingDirectory | 作業ディレクトリ(カレントディレクトリ) | |
ExecStart | systemctl startした時の実行処理内容 screenソケット名「minecraft」でrun.shを実行するよって意味。 ソケット名付けないと実行したscreenへアタッチするの難しくなるから、何かしら名前は付けようね。 |
|
ExecReload | systemctl reloadした時「minecraft」ってソケットでリロードコマンド実行する | |
ExecStop | systemctl stopした時(以下略 | |
[Install] | WantedBy | default.targetとどっち書いときゃいいか分からん。 今回はこれで動いたしヨシ! |
1-3.daemon読み込み
ファイルができたんでこれを読み込む。
因みにだけど、読み込まずにサービス操作しようとすると確か怒られた気がする。
# systemctl daemon-reload
そしたら試しにサービスにあるか見てみよう。
# systemctl list-unit-files
minecraftserver.service disabled (自分の作ったサービス名でこんな感じに出てくればおk)
NetworkManager-dispatcher.service enabled
NetworkManager-wait-online.service enabled
NetworkManager.service enabled
nfs-rquotad.service disabled
1-4.サービス起動
ここまで来たらあとはサービスを立ち上げてみる。
まずはサービスの有効化をする。
# systemctl enable minecraftserver.service
何も出なければきっと有効化している。
もっかいsystemctl list-unit-filesで見てみて。
enabledになってればとりあえずここまでOK。
次は起動してみる。
# systemctl start minecraftserver.service
そしたら、何かあっても何もなくてもStatusチェック。(今回は無事OKとして。)
# systemctl status minecraftserver.service
● minecraftserver.service - Minecraft server start
Loaded: loaded (/etc/systemd/system/minecraftserver.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2022-03-13 21:51:15 JST; 2h 6min ago
Main PID: 963 (screen)
CGroup: /system.slice/minecraftserver.service
|-963 /usr/bin/SCREEN -DmS minecraft sh run.sh
|-967 sh run.sh
|-970 java @user_jvm_args.txt @libraries/net/minecraftforge/forge/...
ここまで出来ればあとはOS再起動しても勝手に立ち上がってくるはずなのでこれで完了。
バックアップやバックアップ後の再起動処理云々とかはまた別記事か、もしくはこの記事の後半として追記するかも。(いずれにしても近いうちに書く)
ひとまずはこれでお疲れ様。
続きの記事を公開したので以下URL案内します。
- ConoHa VPSでマイクラ鯖を立てた時の話(バックアップとかOS再起動とか)