Minecraftサーバーをsystemdで起動・終了をする
History
#Linux #Minecraft #Systemd

tmuxが必要です。

1. 起動スクリプトの作成

まずMinecraftサーバーがあるディレクトリに移動します。
今回は/home/ubuntu/mc-serverとし、ユーザーはubuntuとします。
Minecraftサーバーの起動と終了に必要なboot.shを作成します。

#!/bin/bash
TMUX_NAME=mcserver
case $1 in
start)
tmux new-session -s $TMUX_NAME -d "java -jar server.jar nogui";;
stop)
tmux send-keys -t $TMUX_NAME "say 10秒後にサーバーを停止します" Enter
sleep 10
tmux send-keys -t $TMUX_NAME "save-all" Enter
sleep 5
tmux send-keys -t $TMUX_NAME "stop" Enter
sleep 20;;
*)
echo "start | stop"
esac
view raw boot.sh hosted with ❤ by GitHub

TMUX_NAMEはtmuxのセッション名です。
7行目のjava -jar server.jar noguiは、サーバー本体のファイル名など環境によって適宜変更してください。

2. systemdのユニットファイルの作成

/etc/systemd/systemに適当な名前でユニットファイルを作成します。
今回はmcserver.serviceとします。

[Unit]
Description=Minecraft Server
After=network-online.target
[Service]
Type=forking
User=ubuntu
WorkingDirectory=/home/ubuntu/mc-server
ExecStart=/bin/bash /home/ubuntu/mc-server/boot.sh start
ExecStop=/bin/bash /home/ubuntu/mc-server/boot.sh stop
Restart=always
[Install]
WantedBy=multi-user.target

ユニットファイル内のユーザーや作業ディレクトリ等も、環境によって適宜変更してください。

3. systemdに読み込ませる

$ sudo systemctl daemon-reload

sudo systemctl start mcserverでMinecraftサーバーが起動し、stoprestartではサーバー内に通知してから停止できます。
enableすれば、システム起動時に自動的に立ち上げることができます。

« systemd-nspawnを使ってみた
Arch Linuxでvirt-managerを使う »