0
0

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.

Bungeecord鯖をShellScriptを使って起動・停止させる

Posted at

Minecraft鯖のスクリプトについて

BungeeCord鯖用のスクリプトを考えるにあたってそもそも作っている方いらっしゃらないかな?と思い検索したところやはりいらっしゃりました。
https://minecraft.server-memo.net/alma_java_minecraft_server_install/

こちらをもとに「簡易バックアップ」と「フルバックアップ」機能を排除,「再起動」機能を追加したコードになります。

#!/bin/bash
#
# minecraft_server start/stop/restart/status script
#

# mincraft_server.jar 実行ユーザ
USERNAME='root'

# session名
SESSION_NAME='minecraft'

# minecraft_serverディレクトリ
MC_PATH='/home/servers/minecraft'

# 実行するminecraft_server.jar
SERVICE='spigot-1.18.0.jar'

# メモリ設定
XMX='8G'
XMS='8G'

cd $MC_PATH

ME=`whoami`

if [ $ME != $USERNAME ]; then
  echo "Please run the $USERNAME user."
  exit
fi

# Minecraft 開始処理
start() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "$SERVICE is already running!"
  else
    echo "Starting $SERVICE..."
    tmux new-session -d -s $SESSION_NAME
    tmux send-keys -t $SESSION_NAME:0 "java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui" C-m
  fi
}

# Minecraft 停止処理
stop() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "Stopping $SERVICE"
    tmux send-keys -t $SESSION_NAME:0 "say SERVER SHUTTING DOWN IN 10 SECONDS." C-m
    sleep 10
    tmux send-keys -t $SESSION_NAME:0 "stop" C-m
    sleep 10
    echo "Stopped $SESSION_NAME server"
  else
    echo "$SERVICE is not running!"
    exit
  fi

  while :
  do
    if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
      echo "Stopping $SERVICE"
      sleep 10
    else
      tmux kill-session -t $SESSION_NAME
      echo "Stoped $SERVICE"
      break
    fi
  done
}

# Minecraft 再起動処理
restart() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "Stopping $SERVICE"
    tmux send-keys -t $SESSION_NAME:0 "say SERVER SHUTTING DOWN IN 10 SECONDS." C-m
    sleep 10
    tmux send-keys -t $SESSION_NAME:0 "stop" C-m
    sleep 10
    echo "Stopped $SESSION_NAME server"
  else
    tmux kill-session -t $SESSION_NAME
    start
    exit
  fi

  while :
  do
    if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
      echo "Stopping $SERVICE"
      sleep 10
    else
      tmux kill-session -t $SESSION_NAME
      echo "Stoped $SERVICE"
      start
      break
    fi
  done
}

# Minecraft 起動状態確認処理
status() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "$SERVICE is already running!"
    exit
  else
    echo "$SERVICE is not running!"
    exit
  fi
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  status)
    status
    ;;
  *)
    echo  $"Usage: $0 {start|stop|restart|status}"
esac 

bungeecord用のスクリプトへ書き換える

bungeecordサーバーとspigotサーバーの違いは使用可能コマンドの違いです。このスクリプト内で言えばsayコマンドとalertコマンド,stopコマンドとendコマンドの違いです。
ならそれを書き換えてファイルの場所や.jarのファイル名,そもそもbungeecordに8GBのメモリ割り当ては不要なのでその修正...をします。

#!/bin/bash
#
# BungeeCord start/stop/restart/status script
#

# BungeeCord.jar 実行ユーザ
USERNAME='root'

# session名
SESSION_NAME='bungeecord'

# BungeeCord_serverディレクトリ
BC_PATH='/home/servers/bungeecord'

# 実行するBungeeCord.jar
SERVICE='BungeeCord.jar'

# メモリ設定
XMX='512M'
XMS='512M'

cd $BC_PATH

ME=`whoami`

if [ $ME != $USERNAME ]; then
  echo "Please run the $USERNAME user."
  exit
fi

# BungeeCord 開始処理
start() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "$SERVICE is already running!"
  else
    echo "Starting $SERVICE..."
    tmux new-session -d -s $SESSION_NAME
    tmux send-keys -t $SESSION_NAME:0 "java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui" C-m
  fi
}

# BungeeCord 停止処理
stop() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "Stopping $SERVICE"
    tmux send-keys -t $SESSION_NAME:0 "alert SERVER SHUTTING DOWN IN 10 SECONDS." C-m
    sleep 10
    tmux send-keys -t $SESSION_NAME:0 "end" C-m
    sleep 10
    echo "Stopped $SESSION_NAME server"
  else
    echo "$SERVICE is not running!"
    exit
  fi

  while :
  do
    if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
      echo "Stopping $SERVICE"
      sleep 10
    else
      tmux kill-session -t $SESSION_NAME
      echo "Stoped $SERVICE"
      break
    fi
  done
}

# BungeeCord 再起動処理
restart() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "Stopping $SERVICE"
    tmux send-keys -t $SESSION_NAME:0 "alert SERVER SHUTTING DOWN IN 10 SECONDS." C-m
    sleep 10
    tmux send-keys -t $SESSION_NAME:0 "end" C-m
    sleep 10
    echo "Stopped $SESSION_NAME server"
  else
    tmux kill-session -t $SESSION_NAME
    start
    exit
  fi

  while :
  do
    if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
      echo "Stopping $SERVICE"
      sleep 10
    else
      tmux kill-session -t $SESSION_NAME
      echo "Stoped $SERVICE"
      start
      break
    fi
  done
}

# BungeeCord 起動状態確認処理
status() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "$SERVICE is already running!"
    exit
  else
    echo "$SERVICE is not running!"
    exit
  fi
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  status)
    status
    ;;
  *)
    echo  $"Usage: $0 {start|stop|restart|status}"
esac 

ざざっとコメント等も修正したわけですが...まぁ,動かしてみましょう。

不具合発生

なぜか停止コマンドを実行すると無限ループから抜け出せなくなってしまいました。セッション終了などを使って一度セッションを止めてログを見に行ってみましょう。

21:39:13 [INFO] [/107.178.234.85:49432] <-> InitialHandler has pinged
>
21:55:57 [INFO] Command not found

コマンドが実行できていない判定になっている?

はい,なぜかendのみうまく実行できないようです...諦めるか...?
いえ,そんな必要はありません。

Google先生に質問したところこちらのスレッドを発見しました。中身を見ているとやはりendコマンドを実行できないということに悩んでる方が質問していました。

面倒くさがりが勝って回答を即見に行った結果...

tmux send-keys -t $SESSION_NAME:0 "e"
tmux send-keys -t $SESSION_NAME:0 "nd" C-m

と書き換えるだけで修正できました。

皆さんも同じ不具合(もしかしたら仕様)にはまった場合はこのようにすることで改善されるかと思います。

最後に...

restartコマンドをガバチョンで作ったため同一処理を二回書いてしまっていますが...仕方ないということにしましょうw
誤字等ありましたら,コメントなどで教えていただけるとありがたいです。(夜にばああああああと書いたので...)

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?