如果服务器崩溃,将自动重新启动的Shell脚本

当Java进程经常死机时,不得不进行设置的脚本,进行死活监测并在出现问题时重新启动。

#!/bin/sh
monitorInterval=3
bootWait=10
partOfProgramName="minecraft_server"
while true
do
  isAlive=`ps -ef | grep $partOfProgramName | grep -v grep | wc -l`
  if [ $isAlive = 1 ]; then
    echo "[起動中]: $partOfProgramName `date`"
  else
    echo "[停止]: $partOfProgramName `date`"
    flag=true
    while $flag
    do
      echo "[再起動中]: $partOfProgramName"
      isRebooted=`ps -ef | grep $partOfProgramName | grep -v grep | wc -l`
      if [ $isRebooted = 1 ]; then
        flag=false
      fi
      sleep $bootWait
      /usr/bin/java -Xmx840M -Xms840M -jar minecraft_server.1.10.jar nogui & >/dev/null 
    done
  fi
  sleep $monitorInterval
done

将其放入与程序相同的文件夹中,并且一起运行,这样就可以自动恢复。

用途はAWSのt2.microみたいな貧弱なサーバーにminecraftのサーバー立てたりする時に使う。

如果还是不行的话,

#!/bin/sh
bootWait=10
partOfProgramName="minecraft_server"
isAlive=`ps -ef | grep $partOfProgramName | grep -v grep | wc -l`
if [ $isAlive = 1 ]; then
  echo "[起動中]: $partOfProgramName `date`"
else
  echo "[停止]: $partOfProgramName `date`"
  flag=true
  while $flag
  do
    echo "[再起動中]: $partOfProgramName"
    isRebooted=`ps -ef | grep $partOfProgramName | grep -v grep | wc -l`
    if [ $isRebooted = 1 ]; then
      flag=false
    fi
    sleep $bootWait
    /usr/bin/java -Xmx840M -Xms840M -jar minecraft_server.1.10.jar nogui & >/dev/null
  done
fi

在crontab中注册并执行此项。如果一直保留到这一步,它就不会轻易关闭。但要记得,如果连restart_svr.sh也注册进去了,在关机时需要记得暂停cron的运行。