Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Dlaczego serwera się nie restartuje drugi raz?


Rekomendowane odpowiedzi

Opublikowano

Mam serwer na VPS i chcę żeby serwer restartował się do tego celu użyłem pluginu Restarter i skryptu w pliku start.sh:

#!/bin/bash


BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"


while true
do
screen -S ChestPvP java -Xmx2500M -jar Spigot.jar


    echo -e 'Jesli chcesz przerwac restart wcisnij CTRL+C'
    echo "Restart za:"
    for i in {5..1};
    do
echo "$i..."
        sleep 1
    done
echo 'Restart!'
done

Serwer zatrzymuje się --> startuje --> stopuje ale już nie startuje kolejny raz. Ktoś wie jaka jest przyczyna?

Opublikowano

Cześć! Wytłumaczę Ci jak to zrobić na przykładzie mojego serwera ;) .

Wgraj plik skrypt.sh na konto z serwerem Minecraft i uzupełnij dane takie jak ścieżka do katalogu z plikiem startowym (np spigot.jar), jego nazwą i nazwą konta.

Aby zarządzać serwerem używasz (musisz wpisać na koncie z serwerem):

 

 

./skrypt.sh start - Uruchamisz serwer

./skrypt.sh console - Włączasz konsolę

./skrypt.sh stop - Wyłączasz serwer

./skrypt.sh restart - Restartujesz serwer

 

 

Następnie wpisujesz

 

crontab -e

 

wybierasz "nano" (zazwyczaj nr 1), klikasz enter, przechodzisz na koniec tekstu strzałkami i dodajesz tam:

 

*/1 * * * * ./skrypt.sh start #Uruchamia serwer w przypadku crasha, próba co 1 minutę

0 3 * * * ./skrypt.sh restart #Restartuje serwer codziennie o 3:00. 3 możesz zamienić na dowolną godzinę w formacie 24H

 

 

Następnie wpisujesz CTRL+O, klikasz enter, wpisujesz CTRL+X i gotowe ;)

 

EDIT: MPC nie pozwala na upload skryptów basha więc daję jego kod:

#!/bin/bash

#Ustawenia
JAR="spigot.jar"
PREFIX="MC"
USERNAME="mc"
MCPATH="./"
CPU_COUNT=1
MEMORY="2G"
MEMORYL="1500M"

#INVOCATION="java -native -server -Xincgc -Xmx$MEMORY -Xms1024M -Xmn512M -XX:NewRatio=3 -XX:+UseThreadPriorities -XX:CMSFullGCsBeforeCompaction=1 -XX:SoftRefLRUPolicyMSPerMB=2048 -XX:+CMSParallelRemarkEnabled -XX:+UseParNewGC -XX:+UseAdaptiveSizePolicy -XX:+DisableExplicitGC -Xnoclassgc -oss4M -ss4M -XX:+UseFastAccessorMethods -XX:CMSInitiatingOccupancyFraction=90 -XX:+UseConcMarkSweepGC -XX:UseSSE=4 -XX:+UseCMSCompactAtFullCollection -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar craftbukkit-1.4.2-R0.2.jar nogui"
#INVOCATION="java -server -Xincgc -Xmx$MEMORY -Xms$MEMORYL -jar craftbukkit.jar nogui"
INVOCATION="java -d64 -Xmx$MEMORY -Xms$MEMORYL -XX:MaxPermSize=256M -XX:PermSize=64m -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseNUMA -XX:+CMSParallelRemarkEnabled -XX:MaxGCPauseMillis=50 -XX:+UseAdaptiveGCBoundary -XX:-UseGCOverheadLimit -XX:+UseBiasedLocking -XX:UseSSE=3 -XX:+UseStringCache -XX:+UseCompressedOops -XX:+OptimizeStringConcat -XX:+UseFastAccessorMethods -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $JAR nogui"
NOW=$(date +"%d-%m-%Y")
TIME=$(date +"%Hh%Mm%Ss")
WORLDSTORAGE="${MCPATH}/worldstorage"
BACKUPPATH="/home/${USERNAME}/minebackup"
RAMDISK="/ramdisk"
RAM=0 # WĹacznik ramdisku

mc_start() {
  if ps x | grep -v grep | grep -v -i SCREEN | grep $JAR > /dev/null
  then
    echo -e $PREFIX "\E[32mSerwer Minecraft juz dziala!\033[0m"
  else
    echo -e $PREFIX "\E[32mUruchamianie serwera Minecraft...\033[0m"
    cd $MCPATH
    mkdir -p logs
    cp server.log ./logs/server-$NOW-$TIME.log
    > server.log
    screen -mdS minecraft $INVOCATION
    sleep 10
    if ps x | grep -v grep | grep -v -i SCREEN | grep $JAR > /dev/null
    then
      echo -e $PREFIX "\E[32mSerwer Minecraft jest wlaczony!\033[0m"
    else
      echo -e $PREFIX "\E[31mBLAD!\E[31mNie mozna uruchomic Serwera Minecraft! Skontaktuj sie z administratorem!\033[0m"
    fi
  fi
}
mc_stop() {
  if ps x | grep -v grep | grep -v -i SCREEN | grep $JAR > /dev/null
  then
    echo -e $PREFIX "\E[32mWylaczanie serwera Minecraft!\033[0m"
    screen -p 0 -S minecraft -X stuff "say Wylaczenie serwera!$(echo -ne '\r')"
    screen -p 0 -S minecraft -X stuff "save-all$(echo -ne '\r')"
    screen -p 0 -S minecraft -X stuff "kickall Serwer jest restartowany.$(echo -ne '\r')"
    sleep 10
    screen -p 0 -S minecraft -X stuff "stop$(echo -ne '\r')"
    sleep 10
    i=0
    while [ $i -le 6 ]
    do
      i=$[i+1]
      if  ps x | grep -v grep | grep -v -i SCREEN | grep $JAR > /dev/null
      then
        sleep 10
      else
	  touch $MCPATH/restore.lock
      break
      fi
    done

  kill -9 pidof java


    if ps x | grep -v grep | grep -v -i SCREEN | grep $JAR > /dev/null
    then
      echo -e $PREFIX "\E[31mBLAD! Serwer Minecraft nie moze zostac wylaczony!\033[0m"
      echo -e $PREFIX "\E[31mJezeli serwer sie zawisil uzyj opcji kill!\033[0m"
    else
      echo -e $PREFIX "\E[32mSerwer Minecraft zostal \E[31mwylaczony!\033[0m"
    fi
  else
    echo -e $PREFIX "\E[32mSerwer Minecraft jest \E[31mwylaczony!\033[0m"
  fi
}

mc_console() {
  if ps x | grep -v grep | grep -v -i SCREEN | grep $JAR > /dev/null
  then
    #if ps x | grep -v grep | grep -v SCREEN | grep -w minecraft > /dev/null
      echo -e $PREFIX "\E[32mUruchamianie konsoli serwera Minecraft.\033[0m"
      echo -e $PREFIX "\E[32mAby wyjsc nalezy wcisnac Ctrl+A nastepnie Ctrl+D!\033[0m"
      sleep 5
      screen -x minecraft
  else
    echo -e $PREFIX "\E[32mSerwer Minecraft jest \E[31mwylaczony!\033[0m"
  fi
}

mc_kill() {
  if ps x | grep -v grep | grep -v -i SCREEN | grep $JAR > /dev/null
  then
    SCREEN_PID=$(screen -ls | perl -ne 'if ($_ =~ /^\t(\d+)\.minecraft/) { print $1; }')
    sleep 1
    JAVA_PID=$(ps -a -u $USERNAME -o pid,ppid,comm | perl -ne 'if ($_ =~ /^\s*(\d+)\s+'$SCREEN_PID'\s+java/) { print $1; }')
    kill -9 $SCREEN_PID $JAVA_PID
    screen -wipe > /dev/null
	touch $MCPATH/restore.lock
  else
    echo -e $PREFIX "\E[32mSerwer Minecraft jest \E[31mwylaczony!\033[0m"
  fi
}
mc_saveon() {
  if ps x | grep -v grep | grep -v -i SCREEN | grep $JAR > /dev/null
  then
	screen -p 0 -S minecraft -X stuff "save-on$(echo -ne '\r')"
  #else
    #echo -e $PREFIX "\E[32mSerwer Minecraft jest wylaczony!\033[0m"
  fi
}
mc_saveoff() {
  if ps x | grep -v grep | grep -v -i SCREEN | grep $JAR > /dev/null
  then
	screen -p 0 -S minecraft -X stuff "save-off$(echo -ne '\r')"
	screen -p 0 -S minecraft -X stuff "save-all$(echo -ne '\r')"
	sync
	sleep 10
  #else
    #echo -e $PREFIX "\E[32mSerwer Minecraft jest wylaczony!\033[0m"
  fi
}
get_worlds() {
	a=1
	for NAME in $(ls $WORLDSTORAGE)
	do
		if [ -d $WORLDSTORAGE/$NAME ]
		then
			WORLDNAME[$a]=$NAME
			if [ -e $WORLDSTORAGE/$NAME/ramdisk ]
			then
				WORLDRAM[$a]=true
			else
				WORLDRAM[$a]=false
			fi
			a=$a+1
		fi
	done
}
check_links() {
	get_worlds
	for INDEX in ${!WORLDNAME[@]}
	do
		if [[ -L $MCPATH/${WORLDNAME[$INDEX]} || ! -a $MCPATH/${WORLDNAME[$INDEX]} ]]
		then
			link=`ls -l $MCPATH/${WORLDNAME[$INDEX]} | awk '{print $11}'`
			if ${WORLDRAM[$INDEX]}
			then
				if [ "$link" != "$RAMDISK/${WORLDNAME[$INDEX]}" ]
				then
					rm -f $MCPATH/${WORLDNAME[$INDEX]}
					ln -s $RAMDISK/${WORLDNAME[$INDEX]} $MCPATH/${WORLDNAME[$INDEX]}
					echo "Stworzono link dla ${WORLDNAME[$INDEX]}"
				fi
			else
				if [ "$link" != "${WORLDSTORAGE}/${WORLDNAME[$INDEX]}" ]
				then
					rm -f $MCPATH/${WORLDNAME[$INDEX]}
					ln -s ${WORLDSTORAGE}/${WORLDNAME[$INDEX]} $MCPATH/${WORLDNAME[$INDEX]}
					echo "Stworzono link dla ${WORLDNAME[$INDEX]}"
				fi
			fi
		else
			echo "Nie mozna stworzyc linkow. Wrzuc wszystkie mapy do ${WORLDSTORAGE}."
			exit 1
		fi
	done
	echo "Linki sprawdzone!"
}
to_ram() {
	get_worlds
	for INDEX in ${!WORLDNAME[@]}
	do
		if ${WORLDRAM[$INDEX]}
		then
			if [ -L $MCPATH/${WORLDNAME[$INDEX]} ]
			then
				rsync -rt ${WORLDSTORAGE}/${WORLDNAME[$INDEX]}/ $RAMDISK/${WORLDNAME[$INDEX]}
				echo "${WORLDNAME[$INDEX]} skopiowane do RAM"
			fi
		fi
	done
}
to_disk() {
	if ps x | grep -v grep | grep -v -i SCREEN | grep $JAR > /dev/null
	then
		get_worlds
		for INDEX in ${!WORLDNAME[@]}
		do
			rsync -rt $MCPATH/${WORLDNAME[$INDEX]}/ ${WORLDSTORAGE}/${WORLDNAME[$INDEX]}
			#echo "${WORLDNAME[$INDEX]} skopiowane na DYSK"
		done
	#else
		#echo -e $PREFIX "\E[32mSerwer Minecraft jest wylaczony!\033[0m"
	fi
}
change_ramdisk_state() {
	if [ ! -e $WORLDSTORAGE/$1 ]
	then
		echo "World \"$1\" not found."
		exit 1
	fi

	if [ -e $WORLDSTORAGE/$1/ramdisk ]
	then
		rm $WORLDSTORAGE/$1/ramdisk
		echo "removed ramdisk flag from \"$1\""
	else
		touch $WORLDSTORAGE/$1/ramdisk
		echo "added ramdisk flag to \"$1\""
	fi
	echo "changes will only take effect after server is restarted."
}
mc_world_backup() {
	get_worlds
	for INDEX in ${!WORLDNAME[@]}
	do
		echo "Backing up minecraft ${WORLDNAME[$INDEX]}"
		mkdir -p $BACKUPPATH
		mkdir -p $BACKUPPATH/$NOW-$TIME
		cd $WORLDSTORAGE
		tar -chzf $BACKUPPATH/$NOW-$TIME/${WORLDNAME[$INDEX]}.tar.gz ${WORLDNAME[$INDEX]}
	done
}
#Start-Stop here
case "$1" in
  start)
	if [ $RAM = 1 ]
	then
		check_links
		to_ram
	fi
	mc_start
    ;;
  stop)
    mc_stop
	if [ $RAM = 1 ]
	then
		to_disk
	fi
    ;;
  restart)
    mc_stop
	if [ $RAM = 1 ]
	then
		to_disk
		check_links
		to_ram
	fi
    mc_start
    ;;
  console)
   mc_console
   ;;
  kill)
   mc_kill
   ;;
  worlds)
	if [ $RAM = 1 ]
	then
		get_worlds
		for INDEX in ${!WORLDNAME[@]}
			do
				if ${WORLDRAM[$INDEX]}
				then
					echo "${WORLDNAME[$INDEX]} (ramdisk)"
				else
					echo ${WORLDNAME[$INDEX]}
				fi
			done
	fi
		;;
  ramdisk)
	if [ $RAM = 1 ]
	then
		change_ramdisk_state $2
	fi
	;;
  links)
		if [ $RAM = 1 ]
		then
			check_links
		fi
		;;
  to-disk)
		# Writes from the ramdisk to disk, in case the server crashes.
		# Using ramdisk speeds things up a lot, especially if you allow
		# teleportation on the server.
		if [ $RAM = 1 ]
		then
		mc_saveoff
		to_disk
		mc_saveon
		fi
		;;
	backup)
		# Backups world
		screen -p 0 -S minecraft -X stuff "say Tworzenie kopii.$(echo -ne '\r')"
		mc_saveoff
		if [ $RAM = 1 ]
		then
			to_disk
		fi
		mc_world_backup
		mc_saveon
		screen -p 0 -S minecraft -X stuff "say Kopia zakonczona.$(echo -ne '\r')"
		;;
  status)
    if ps x | grep -v grep | grep -v -i SCREEN | grep $JAR > /dev/null
    then
      echo -e $PREFIX "Serwer Minecraft jest \E[32mwlaczony!\033[0m"
    else
      echo -e $PREFIX "Serwer Minecraft jest \E[31mwylaczony\033[0m!"
    fi
    ;;
	help)
		echo -e $PREFIX
		echo -e "Uzycie: minecraft \E[32mkomenda\033[0m"
		echo
		echo -e "\E[32mstart\033[0m - uruchamia serwer"
		echo -e "\E[32mstop\033[0m - wyĹÄcza serwer"
		echo -e "\E[32mrestart\033[0m - restartuje serwer"
		echo -e "\E[32mstatus\033[0m - status serwera"
		echo -e "\E[32mconsole\033[0m - uruchamia konsole serwera"
		echo -e "\E[32mkill\033[0m - zabija serwer! \E[31mUĹźywaÄ tylko gdy serwer siÄ zawiesi!\033[0m"
		echo
		;;
  *)
  echo -e $PREFIX "Brak takiej komendy! Wpisz \E[32mminecraft help \033[0maby zobaczyÄ pomoc."
  exit 1
  ;;
esac

exit 0


Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...