3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

法政大学情報科学部Advent Calendar 2023

Day 18

Minecraft (JE) 鯖を systemd と screen で動かして cron で自動再起してみる

Last updated at Posted at 2023-12-17

はじめに

この記事は「法政大学情報科学部 Advent Calendar 2023」 16 日目の記事になります。

こんにちは、情報科学部の waigoma です。
前回 proxmox のコンテナを作り、そこで Minecraft 鯖を動かしていたのですが、
コンテナ再起したときにわざわざコンテナに入って起動するのがめんどくさかったので、
デーモン化に踏み込んでみたことについて書いていきます。

この記事では、メモのような形でやったことを残していく。
Minecraft (JE) 鯖を systemd で動かす、
systemd + cron で実行する鯖自動再起動、
screen で鯖のコンソールにアクセスするメモを紹介する。

環境

  • Proxmox 7.4-17
  • Ubuntu 22.04.2 LTS
  • Minecraft JE Server 1.20.1
  • Java 17 (OpenJDK)

前提

Linux, systemd, screen, cron, Java, Minecraft 鯖が実行可能な状態である。
もし実行できなければ、インストール、パスの通しを先に済ませておくこと。
※ パスは適宜自分のものに変更しましょう。

鯖起動/停止スクリプトを用意する

鯖起動スクリプトは start.sh

/home/minecraft/server/start.sh
# minecraft という名前の screen で、java コマンドを実行する。
# 最大メモリを 4608M に設定し、nogui で server.jar を起動する。
screen -S minecraft -U -d -m java -Xmx4608M -jar server.jar --nogui

停止スクリプトは stop.sh

/home/minecraft/server/stop.sh
#!/bin/bash

# === 設定 ===
# サーバ終了までの待ち時間
WAIT=60
# screenの名前
SCREEN_NAME='minecraft'
# ============

# minecraft という名前の screen に次の文字列を書き込む。(\015 を忘れると enter されないので注意)
screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "say reboot server after '${WAIT}' secs...\015"'

# WAIT 秒待ってから
sleep $WAIT

# 鯖を止める
screen -p 0 -S ${SCREEN_NAME} -X eval 'stuff "stop\015"'

systemd で鯖をデーモン化する

service ファイルを作る

/etc/systemd/system/minecraft.service
[Unit]
Description=Minecraft server
After=network-online.target

[Service]
Type=forking
WorkingDirectory=/home/minecraft/server
ExecStart=/bin/bash /home/minecraft/server/start.sh
ExecStop=screen -S minecraft -X quit
Restart=always 

[Install]
WantedBy = multi-user.target

systemd に読み込ませて起動、自動起動も有効にする

// /etc/systemd/system/minecraft.service を読み込む
# systemctl daemon-reload

// 再起動時にも自動起動するよう設定
# systemctl enable minecraft

// Minecraft の鯖を起動
# systemctl start minecraft

cron で定期的に鯖を停止するようにする

cron の使い方は各自調べてみてください

# crontab -e
# 毎日 05:05, 14:05, 23:05 に、stop スクリプトを実行する。ログは > 以下に保存する。
5 5,14,23 * * * /home/minecraft/server/stop.sh > /var/log/minecraft/log.txt

screen で Minecraft 鯖のコンソールにアクセスする

# screen -r minecraft
// screen から出たいときは、ctrl + a の後に d を押す

最後に

ここまで目を通してくださってありがとうございます。
何かの役に立っていれば嬉しいです!

今回の内容は鯖主には有益になるんじゃないかなと思い、書いてみました。
特に定期的に再起動することはメモリ開放などの点から重要だと思っていて、
鯖を開きっぱなしにしていて、重くなると感じている人には効果的かもしれません。

基本的にはコピペでできるようにしてあるので、
気になった方はぜひやってみてください!
(パスだけ注意!)

ここまでお付き合いいただき、ありがとうございました!
それでは良き Minecraft ライフを!

参考文献

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?