使用ShellScript来启动和停止Bungeecord服务器

关于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的脚本。

The difference between a BungeeCord server and a Spigot server lies in the difference in available commands. In this script, it refers to the difference between the “say” command and the “alert” command, as well as the difference between the “stop” command and the “end” command.

So, let’s make changes to the file location, the .jar file name, and also remove the unnecessary allocation of 8GB memory for BungeeCord…

#!/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

只需进行修改就可以修正。

如果大家遇到了相同的故障(也许是设计问题),我认为通过以下方式可以改善。

最终… …)

由于用GABA CHON创建了重新启动命令,因此同样的处理代码被写了两次…但是…没办法嘛,就这样吧,哈哈。
如果有拼写错误之类的,请在评论中告诉我,非常感谢。(因为我是在晚上写的…)

广告
将在 10 秒后关闭
bannerAds