Skocz do zawartości


Zdjęcie

Linux: Skrypt startowy i nie tylko dla MC


  • Zaloguj się, aby dodać odpowiedź
21 odpowiedzi w tym temacie

#1 Maran

Maran

    Nowy

  • Użytkownik
  • 64 postów
  • marcinsan

Napisano 23 March 2012 - 18:07

Witam, jest to mój pierwszy temat i post na tym forum.
A więc ostatnio uczę się trochę basha, we własnym zakresie i w ramach ćwiczeń oraz z nudów, stworzyłem skrypt który powinien ułatwić uruchamianie, zatrzymywanie restartowanie itp. Serwera minecraft, jego kod podam niżej a gotowy plik w załączniku. Bardzo bym był wdzięczny za konstruktywną krytykę oraz opinie na temat tego skryptu, ewentualnie uwagi co można by było jeszcze za funkcje do nie go dodać.

Skrypt ten daje możliwość robienia kopii zapasowych plików serwera minecraft,
które można również raz na dzień wysyłać na zdalny serwer FTP. Wszystko konfiguruje się w samym skrypcie w sekcji konfiguracyjnej która jest dość dobrze opisana komentarzami, mimo to opisze ją jeszcze raz pokrótce w tym poście.
Chciał bym zaznaczyć jeszcze że komunikacja ze zdalnym serwerem FTP wymaga zainstalowanego programu "ncftp" który w przypadku debiana lub ubuntu instaluje się za pomocą komendy:

Debian
apt-get install ncftp
Ubuntu
sudo apt-get install ncftp

W przypadku instalacji w innych dystrybucjach polecam zapytać wujka google lub zajrzeć do repozytoriów danej dystrybucji.

Aby zautomatyzować robienie kopii zapasowej, na przykład aby była robiona automatycznie co 1 godzinę należy dodać odpowiednia regułkę, z pozycji użytkownika systemowego który uruchamia serwer minecraft do "crontab" komendą:
crontab -e
A następnie do pliku który otwarł nam się w trybie edycji, dodać jeden z poniższych wpisów (dodając do nich własną ścieżkę do skryptu) lub można spróbować własnych sił Dołączona grafika .
Wpis ustalający robienie kopi co 30 minut:
*/30 * * * * /<ścieżka do skryptu>/mc.sh kopia 1> /dev/null
Wpis ustalający robienie kopi co 1 godzinę:
0 * * * * /<ścieżka do skryptu>/mc.sh kopia 1> /dev/null

Należy pamiętać że aby skrypt w ogóle zadziałał, trzeba nadać mu prawa do wykonywania czyli:
chmod +x mc.sh

Opis konfiguracji skryptu:
#################################
# Konfiguracja skryptu #
#################################

1. #Nazwa pliku jar np. jarname='plik.jar'
jarname='minecraft_server.jar'
#################################
2. #Określenie ilości pamięci ram dla serwera
#np. Xmx=1024M i Xms=1024M

Xmx=1024M
Xms=1024M
#################################
3. #Nazwa procesu screen i wirtualnego terminala
#np. scrname=nazwa procesu i vtermname=nazwa wirtualnego
#terminala
#UWAGA nie używaj spacji w nazwach procesu i terminala

scrname='smc'
vtermname='minecraft'
#################################
4. #Określenie ilości czasu w sekundach do
#restartu ® i zatrzymania (s) serwera
#np. r=10 s=15 czyli restart nastąpi po 10 sekundach
#a zatrzymanie po 15 sekundach

r=10
s=10
#################################
5. #Ustalenie własnej informacji wyświetlanej
#na serwerze podczas jego restartowania,
#wyłączania i tworzenia kopii zapasowej
#np. info_restart='treść' i info_stop='treść'
#info_backup='treść'

info_restart='Restart serwera za'
info_stop='Wyłączenie serwera nastąpi za'
info_backup='Kopia zapasowa została zrobiona'
#################################
#########################################
# Konfiguracja kopii zapasowej #
#########################################

6. #Wybór wersji serwera
#np. serwer=0 wersja normalna, serwer=1 bukkit

serwer=0
#########################################
7. #Określenie własnego katalogu kopii zapasowej
#np. /home/minecraft/backup
#UWAGA użytkownik systemowy obsługujący serwer
#minecraft musi mieć uprawnienia zapisu w tym katalogu

backupdir=""
#########################################
8. #Ustaw tutaj nazwę katalogu świata jaki
#jest ustawiony w konfiguracji serwera
#np. ns='world'

sn='world'
#########################################
9. #Dodatkowe opcje kopii zapasowej dla bukkita
#ustaw tutaj nazwy katalogów, światów jakie
#są ustawione w konfiguracji serwera
#np. s1='world' s2='world_nether' s3='world_the_end'

s1='world'
s2='world_nether'
s3='world_the_end'
#########################################
10. #Ustawienia usuwania starych kopii zapasowych
#np.:
#usun='tak' (stara kopia zostanie usunięta
#usun='nie' (stara kopia zostanie tylko z archiwizowana)
#UWAGA przy włączonym wysyłaniu na zdalny serwer
#zaleca sie ustawienie tej opcji na usun='tak'

usun='tak'
#########################################
11. #Opcje wysyłania kopii zapasowej na zdalny serwer
#poprzez protokoły FTP lub SFTP
#np.:
#zdalny='ftp' (czyli kopia zostanie wysłana przez FTP)
#zdalny='wyl' (czyli kopia niezostanie wysłana i pozostanie tylko
#na dysku serwera)

zdalny='wyl'
#########################################
12. #Konfiguracja FTP
#np.:
#adres='adres serwera ftp (domena bądź IP)'
#port=numer portu serwera ftp (domyślnie jest to numer 21)
#ftpdir='ścieżka do katalogu na zdalnym serwerze ftp'
#ftpuser='nazwa użytkownika do konta ftp'
#ftppas='hasło użytkownika do konta ftp'

adres=''
port=21
ftpdir=''
ftpuser=''
ftppas=''
#################################
# Koniec konfiguracji #
#################################
  • W tym punkcie ustalamy nazwę pliku jar naszego serwera, najlepiej edytować jego nazwę i ja skopiować.
  • W punkcie drugim określamy ile chcemy przeznaczyć pamięci ram dla naszego serwera.
  • Tu taj określamy nazwę procesu screen i nazwę wirtualnego terminala, który sam screen tworzy w celu lepszej identyfikacji procesu przez skrypt, a i też nam pomaga szybciej zidentyfikować proces po wykonaniu komendy screen -ls.
  • Tu taj określamy ilość czasu w sekundach po których serwer zostanie wyłączony bądź zresetowany oczywiście po wykonaniu komendy restart lub stop. Domyślnie licznik ustawiony jest na 10 sekund.
  • W tym punkcie możemy ustalić nasze własne treści powiadomień, jakie zostaną wysłane na serwer powiadamiając użytkowników o na przykład restarcie i które będziemy widzieć w konsoli po wywołaniu skryptu z odpowiednim parametrem.
  • Od tego punktu zaczyna się konfiguracja kopii zapasowej, ustalamy w niej czy korzystamy z normalnej wersji serwera czy też z bukkita. Jest to o tyle ważne, ponieważ bukkit ma trochę więcej danych do kopiowania niż normalna wersja serwera.
  • Tu taj określamy ścieżkę do katalogu w którym mają się mieścić kopie zapasowe, trzeba przy tym pamiętać że użytkownik systemowy który uruchamia serwer minecraft musi mieć pełne uprawnienia do zapisu i modyfikowania zawartości w tym katalogu.
  • W tym punkcie ustawiamy nazwę katalogu z plikami świata naszego serwera, najlepiej edytować nazwę tego katalogu i skopiować ją do skryptu.
  • To samo co w punkcie wyżej, lecz dla wszystkich trzech światów.
  • Tutaj określamy czy chcemy aby skrypt automatycznie usuwał starą kopie zapasowa z poprzedniego dnia, czy też ja archiwizował.
  • W tym punkcie ustalamy czy chcemy wysyłać kopie zapasowe z poprzedniego dnia na zdalny serwer czy też nie. Na razie dostępna jest tylko możliwość wysłania na zdalny serwer przez protokół FTP, lecz zamierzam też w nie długim czasie udostępnić możliwość wysyłania przez protokół SFTP .
  • Tu wstawiamy dane potrzebne do połączenia się ze zdalnym serwerem FTP, jeśli włączyliśmy ta funkcję punkt wyżej.
Kod skryptu z screen:

Plik ze skryptem może się nazywać na przykład "mc.sh".
Opcje parametrów uruchomienia skryptu:
  • ./mc.sh start ( uruchomienie serwera)
  • ./mc.sh stop (zatrzymanie serwera)
  • ./mc.sh restart (ponowne uruchomienie serwera)
  • ./mc.sh status (sprawdza czy serwer działa czy też nie)
  • ./mc.sh debug ( efekt taki jak przy uruchomieniu serwera bez na przykład screena, wyłączyć ten tryb można naciskając jednocześnie Ctrl+c)
  • ./mc.sh kopia (tworzenie kopii zapasowej serwera minecraft)
#! /bin/bash
#################################
#	   Konfiguracja skryptu	#
#################################
#Nazwa pliku jar np. jarname='plik.jar'
jarname='minecraft_server.jar'
#################################
#Określenie ilości pamięci ram dla serwera
#np. Xmx=1024M i Xms=1024M
Xmx=1024M
Xms=1024M
#################################
#Nazwa procesu screen i wirtualnego terminala
#np. scrname=nazwa procesu i vtermname=nazwa wirtualnego
#terminala
#UWAGA nie używaj spacji w nazwach procesu i terminala
scrname=smc
vtermname=minecraft
#################################
#Określenie ilości czasu w sekundach do
#restartu (r) i zatrzymania (s) serwera
#np. r=10 s=15 czyli restart nastąpi po 10 sekundach
#a zatrzymanie po 15 sekundach
r=10
s=10
#################################
#Ustalenie własnj informacji wyświetlanej
#na serwerze podczas jego restartowania,
#wyłączania i tworzenia kopii zapasowej
#np. info_restart='treść' i info_stop='treść'
#info_backup='treść'
info_restart='Restart serwera za'
info_stop='Wyłączenie serwera nastąpi za'
info_backup='Kopia zapasowa została zrobiona'
#################################
#########################################
#	   Konfiguracja kopii zapasowej	#
#########################################
#Wybór wersii serwera
#np. serwer=0 wersja normalna, serwer=1 bukkit
serwer=0
#########################################
#Określenie własnego katalogu kopii zapasowej
#np. /home/minecraft/backup
#UWAGA użytkownik systemowy obsługujący serwer
#minecraft musi mieć uprawnienia zapisu w tym katalogu
backupdir=''
#########################################
#Ustaw tutaj nazwę katalogu świata jaki
#jest ustawiony w konfiguracji serwera
#np. ns='world'
sn='world'
#########################################
#Dodatkowe opcje kopii zapasowej dla bukkita
#ustaw tutaj nazwy katalogów, światów jakie
#są ustawione w konfiguracji serwera
#np. s1='world' s2='world_nether' s3='world_the_end'
s1='world'
s2='world_nether'
s3='world_the_end'
#########################################
#Ustawienia usuwania starych kopii zapasowych
#np.:
#usun='tak' (stara kopia zostanie usunięta
#usun='nie' (stara kopia zostanie tylko z archiwizowana)
#UWAGA przy włączonym wysyłaniu na zdalny serwer
#zaleca sie ustawienie tej opcji na usun='tak'
usun='tak'
#########################################
#Opcje wysyłania kopii zapasowej na zdalny serwer
#poprzez protokoły FTP lub SFTP
#np.:
#zdalny='ftp' (czyli kopia zostanie wyslana przez FTP)
#zdalny='wyl' (czyli kopia niezostanie wysłana i pozostanie tylko
#na dysku serwera)
zdalny='wyl'
#########################################
#Konfiguracja FTP
#np.:
#adres='adres serwera ftp (domena bądź IP)'
#port=numer portu serwera ftp (domyślnie jest to numer 21)
#ftpdir='ścieżka do katalogu na zdalnym serwerze ftp'
#ftpuser='nazwa użytkownika do konta ftp'
#ftppas='hasło użytkownika do konta ftp'
adres=''
port=21
ftpdir=''
ftpuser=''
ftppas=''
#################################
#	   Koniec konfiguracji	 #
#################################
Dir=$(readlink -f $0)&&jarpath=$(dirname $Dir)&&cd $jarpath #Ustalenie ścieżki skryptu
function wer
{
  if [ "$serwer" = "0" ];then
		backup
  elif [ "$serwer" = "1" ];then
		backup-bukkit
  fi
}
function pd #funkcja sprawdzająca i usuwająca niedzałajace procesy screen
{
  procd=$(screen -ls | grep $scrname | awk '{print $4}')
  if [ "${procd#(}" = "Dead" ];then
		  screen -wipe 1> /dev/null
  fi
  rm mc.pid
}
function restart # funkcja zatrzymująca serwer na potrzeby restartu
{
  if [ -e mc.pid ];then
		  if ( kill -0 $(cat mc.pid) 2> /dev/null );then
		  while [ $r -ge 1 ];do
				  sleep 1
				  t=$((r--))
				  screen -S $scrname -p $vtermname -X stuff "say $info_restart $t"`echo -ne '\015'`
				  echo $info_restart $t
		  done
		sleep 1
		  echo -e "\\033[1mSerwer Minecraft został zatrzymany\\033[0m"
		  kill -KILL $(cat mc.pid)
		  fi
		  pd
		sleep 1
  else
		  echo -e "\\033[1;31mSerwer nie działa (brakuje pliku z numerem procesu \"mc.pid\")\\033[0m"
		  exit 5
  fi  
}
function usuwanie
{
  if [ "$usun" = "tak" ];then
		  rm -R $backupdir/$name_directory_backup$data_u
  elif [ "$usun" = "nie" ];then
		  zip -r -9 $name_directory_backup$data_u.zip $name_directory_backup$data_u 1> /dev/null
		rm -R $backupdir/$name_directory_backup$data_u
  fi
}
function data
{
  data_u=`date '+%d-%m-%Y' -d '-1 day'`
  data=`date '+%d-%m-%Y_%H:%M:%S'`
  data_k=`date '+%d-%m-%Y'`
}
function zftp
{
  if [ -e /usr/bin/ncftpput ];then
		echo ''
  elif [ -e /usr/local/bin/ncftpput ];then
		echo ''
  else
		echo -e "\\033[1mNa tym serwerze nie zainstalowano klienta FTP\\033[0m \\033[1;31m\"ncftp\" \\033[0m"
		echo -e "\\033[1mAby przeprowadzić tworzenie kopii zapasowej z opcja wysyłania na zdalny serwer ftp, musisz zainstalować na serwerze program\\033[0m \\033[1;31m\"ncftp\"\\033[0m\\033[1m, lub ustawić opcje zdalny='wyl' w sekcji konfiguracyjnej tego skryptu.\\033[0m"
		exit 1
  fi
  data
  cd $backupdir
  zip -r -9 $name_directory_backup$data_u.zip $name_directory_backup$data_u 1> /dev/null
  ncftpput -mzvDD -u $ftpuser -p $ftppas -P $port $adres $ftpdir $backupdir/$name_directory_backup$data_u.zip
  echo -e "\\033[1mKopia zapasowa została przesłana na serwer ftp $adres:$port\\033[0m"
}
function backup
{
  data
  name_directory_backup="kopia_zapasowa_z_dnia_"
  name_file_backup='Kopia_zapasowa_z_'
		mkdir -p $backupdir/$name_directory_backup$data_k/$name_file_backup$data
		mkdir "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/pliki_konfiguracyjne"
		mkdir "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/logi"
		mkdir "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/swiaty"
		cp *.txt "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/pliki_konfiguracyjne"&&cp *.log "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/logi"&&cp server.properties "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/pliki_konfiguracyjne"&&cp -R "$sn" "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/swiaty"
		cd $backupdir/$name_directory_backup$data_k
		zip -r -9 $name_file_backup$data.zip $name_file_backup$data 1> /dev/null&&rm -R $name_file_backup$data
  if [ -e $backupdir/$name_directory_backup$data_u ];then
		if [ "$zdalny" = "ftp" ];then
				zftp
				usuwanie
		elif [ "$zdalny" = "wyl" ];then
				usuwanie
		fi
  else
		echo -e "\\033[1;31mStara kopia zapasowa została już usunięta lub jej w ogóle nie było\\033[0m"
  fi
}
function backup-bukkit
{
  data
  name_directory_backup="kopia_zapasowa_z_dnia_"
  name_file_backup='Kopia_zapasowa_z_'
		mkdir -p $backupdir/$name_directory_backup$data_k/$name_file_backup$data
		mkdir "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/pliki_konfiguracyjne"
		mkdir "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/logi"
		mkdir "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/swiaty"
		mkdir "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/pluginy"
		cp *.txt "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/pliki_konfiguracyjne"&&cp *.log "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/logi"&&cp server.properties "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/pliki_konfiguracyjne"&&cp *.yml "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/pliki_konfiguracyjne"&&cp -R "$s1" "$s2" "$s3" "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/swiaty"&&cp -R 'plugins' "$backupdir/$name_directory_backup$data_k/$name_file_backup$data/pluginy"
		cd $backupdir/$name_directory_backup$data_k
		zip -r -9 $name_file_backup$data.zip $name_file_backup$data 1> /dev/null&&rm -R $name_file_backup$data
  if [ -e $backupdir/$name_directory_backup$data_u ];then
		if [ "$zdalny" = "ftp" ];then
				zftp
				usuwanie
		elif [ "$zdalny" = "wyl" ];then
				usuwanie
		fi
  else
		echo -e "\\033[1;31Stara kopia zapasowa została już usunięta lub jej w ogóle nie było\\033[0m"
  fi
}
case $1 in
		start) #Instrukcje kontroli i startu serwera
				if [ -e mc.pid ];then
						if ( kill -0 $(cat mc.pid) 2> /dev/null );then
								echo -e "\\033[1mSerwer jest uruchomiony, jeśli chcesz możesz zresetować bądź zatrzymać go\\033[0m"
								exit 1
						else
								echo -e "\\033[1mPlik z numerem procesu\\033[0m \\033[1;31mmc.pid\\033[0m \\033[1mistnieje, ale serwer nie działa.
Być może proces serwera został awaryjnie wyłączony\\033[0m"
								pd
						fi
				fi
				if [ "$UID" = "0" ];then
						echo -e "\\033[1;31;40mUWAGA! Ze względów bezpieczeństwa: Nie uruchamiaj serwera jako root\\033[0m"
						c=1
						while [ $c -le 9 ];do
								echo -en "\\033[1;31m!\\033[0m"
								sleep 1
								c=$((++c))
						done
						echo -e "\\033[1;31m!\\033[0m"
						exit 1
				fi
				if [ -e $jarname ];then
						screen -S $scrname -t $vtermname -md java -Xmx$Xmx -Xms$Xms  -jar $jarname nogui
						echo -e "\\033[1mSerwer Minecraft został uruchomiony\\033[0m"
						proc=$(screen -ls | grep $scrname | awk '{print $1}')
						echo ${proc%%.*} > mc.pid
				else
						echo -e "\\033[1;31mNie można odnaleźć pliku jar serwera, przerwanie procesu uruchomienia serwera\\033[0m"
						exit 7
				fi
		;;
		stop) #Instrukcje kontroli i zatrzymania serwera
				if [ -e mc.pid ];then
						if ( kill -0 $(cat mc.pid) 2> /dev/null );then
								while [ $s -ge 1 ];do
										sleep 1
										t=$((s--))
										screen -S $scrname -p $vtermname -X stuff "say $info_stop $t"`echo -ne '\015'`
										echo $info_stop $t
								done
								sleep 1
								echo -e "\\033[1mSerwer Minecraft został zatrzymany\\033[0m"
								kill -KILL $(cat mc.pid)
						fi
						pd
				else
						echo -e "\\033[1;31mSerwer nie działa (brakuje pliku z numerem procesu \"mc.pid\")\\033[0m"
						pd
						exit 5
				fi	
		;;
		restart) #Instrukcje restartu serwera
						restart&&$0 start || exit 1	
		;;
		status) #Instrukcje kontroli i sprawdzania statusu serwera
				if [ -e mc.pid ];then
						if (kill -0 $(cat mc.pid) 2> /dev/null );then
								echo -e "\\033[1mSerwer działa\\033[0m"
						else
								echo -e "\\033[1mSerwer nie działa\\033[0m"
								$0 start || exit 1
						fi
				else
						echo -e "\\033[1;31mSerwer nie działa (brakuje pliku z numerem procesu \"mc.pid\")\\033[0m"
				fi
		;;
		debug) #Instrukcje trybu debugowania serwera
				if [ -e mc.pid ];then
						if (kill -0 $(cat mc.pid) 2> /dev/null );then
								echo -e "\\033[1;31mSerwer działa. Aby uruchomić tryb debugowania, najpierw zatrzymaj serwer.\\033[0m"
								exit 1
						fi
				else
				echo -e "\\033[1mUWAGA! Został uruchomiony tryb debugowania, aby wyjść z tego trybu i wyłączyć serwer, w celu normalnego jego uruchomienia w tle po przez parametr start,\\033[0m"
				echo -e "\\033[1;31m naciśnij \"Ctrl+c\"\\033[0m"
						c=1
						while [ $c -le 9 ];do
								echo -en "\\033[1m!\\033[0m"
								sleep 1
								c=$((++c))
						done
						echo -e "\\033[1m!\\033[0m"
						if [ -e $jarname ];then
								java -Xmx$Xmx -Xms$Xms -jar $jarname nogui
						else
								echo -e "\\033[1;31mNie można odnaleźć pliku jar serwera, przerwanie procesu uruchomienia serwera\\033[0m"
								exit 7
						fi
				fi
		;;
		kopia)
				if [ -e $backupdir ];then
						wer
						screen -S $scrname -p $vtermname -X stuff "say $info_backup"`echo -ne '\015'`
						echo -e "\\033[1m$info_backup\\033[0m"
				else
						mkdir -p $backupdir
						wer
						screen -S $scrname -p $vtermname -X stuff "say $info_backup"`echo -ne '\015'`
						echo -e "\\033[1m$info_backup\\033[0m"
				fi
		;;
		*)
				echo -e "\\033[1mUżyj $0\\033[0m \\033[1;34m{start|stop|restart|status|debug|kopia}\\033[0m"
				exit 2
esac
exit 0 #Koniec skryptu

EDIT:// Został poprawiony błąd z restartem

Gotowe pliki skryptu z kodowaniem:

By zobaczyć linki musisz się zalogować lub zarejestrować


By zobaczyć linki musisz się zalogować lub zarejestrować


  • Kwiatuszek200 lubi to

banner420x60.png


craftportal

Craftserve to największy i najlepszy polski hosting serwerów Minecraft, jest solidny i tani więc go polecam

#2 Dramo

Dramo

    Mistrz

  • Zbanowany
  • 2366 postów

Napisano 23 March 2012 - 19:37

Świetnie opisany poradnik oraz świetnie napisany skrypt.

Programista z zawodu/wykształcenia czy hobbista?

Zaimponowałeś mi swoim pierwszym postem na forum - jako pierwszy na forum.

Niestety nie oczekuj zbyt dużego zainteresowania Twoim tematem - na forum nie ma zbyt dużo osób posiadających wystarczającą wiedzę i umiejętności do ogarnięcia instalacji skryptu, a jeszcze mniej posiada dostęp do ssh (wszystkie większe hostingi mają własne panele web).
Podpinam.

#3 blojayble

blojayble

    :u

  • Użytkownik
  • 414 postów
  • blojayble

Napisano 23 March 2012 - 19:44

Fajny skrypt, może nie jakiś ogromny, ale za to pomysłowy i przydatny. Jak ktoś ma IQ większe od ameby na pewno z chęcią by z tego skorzystał.

oiuyjhophirjoityjpoityuh;jtnypjoetnuoiety;ikrtmyojietyjoietjenh6ru


#4 Maran

Maran

    Nowy

  • Użytkownik
  • 64 postów
  • marcinsan

Napisano 23 March 2012 - 20:03

Na początek dzięki za uznanie i podpięcie tematu.

Co do pytania czy jestem programistą odpowiedź brzmi nie, gdybym odpowiedział tak to wyszedł bym na hipokrytę, po prostu od ponad roku pracuję de facto tylko na linuxie i dlatego znajomość języka skryptowego bash bardzo mnie się przydaje, do ułatwiania sobie po prostu życia, ponieważ linux nawet z okienkami to głównie konsola.
Ponadto administrowałem już nie jednym serwerem postawionym na linuxie oczywiścię amatorsko i cały czas przy tym się ucząc nowych rzeczy, zresztą dalej się uczę.
Ten skrypt napisałem ponieważ jakieś pół roku temu, na jednym serwerze ts gdzie byłem adminem technicznym, postanowiliśmy zainstalować serwer mc i wiem jakie to jest irytujące wpisywać kopiować i korzystać z historii bash, za każdym razem gdy trzeba zresetować serwer mc, dlatego teraz kiedy poczułem się trochę pewniej w pisaniu skryptów bash postanowiłem właśnie stworzyć ten skrypt aby inni mieli nieco łatwiej, a ci którzy mają wystarczającą wiedzę a nawet większą ode mnie na ten temat przy najmniej oszczędzą sobie trochę klawiatury oraz palce :) .

banner420x60.png


#5 enter11

enter11

    Znawca

  • Użytkownik
  • 240 postów
  • enter11

Napisano 28 March 2012 - 14:30

Podobny strasznie do c++ a może to jest c++. Nie pamiętam. :)

#6 tomangelo

tomangelo

    Ekspert

  • Weteran
  • 1795 postów
  • tomangelo

Napisano 28 March 2012 - 15:10

Podobny strasznie do c++ a może to jest c++. Nie pamiętam. :)


To jest skrypt w bashu.
Dołączona grafika <- dołącz do projektu Colobot: Gold Edition.

#7 enter11

enter11

    Znawca

  • Użytkownik
  • 240 postów
  • enter11

Napisano 29 March 2012 - 15:13

Not ta... Ale w każdym razie podobne do c++ np: if,else ale raczej tylko i zastosowanie jest podobne. ;)
Bym użył tego... Wtedy kiedy miał bym serwer. :)

#8 Maran

Maran

    Nowy

  • Użytkownik
  • 64 postów
  • marcinsan

Napisano 29 March 2012 - 18:38

Pamiętaj o tym że w wielu językach programowania instrukcję warunkowe i pętle, nie tylko w podobny sposób są zapisywane ale nawet tak samo działają. I to nie tylko c++ ale java, php, bash itp.

banner420x60.png


#9 Krall

Krall

    Oh, yeah!

  • Użytkownik
  • 233 postów

Napisano 29 March 2012 - 18:42

A nie można, było tego zrobić po prostu jako plik *.sh?

Dołączona grafika

Gold, ale i tak nie u?ywam ;P


#10 Axlii

Axlii

    Tytuł Usunięty

  • Użytkownik
  • 249 postów

Napisano 29 March 2012 - 19:19

Dzięki wielkie, przydało mi się.

#11 Maran

Maran

    Nowy

  • Użytkownik
  • 64 postów
  • marcinsan

Napisano 29 March 2012 - 23:16

A nie można, było tego zrobić po prostu jako plik *.sh?

Z gwoli ścisłości, w pierwszym poście, na samym dole, zaraz pod skryptem w znacznikach "code" masz dwa odnośniki do pobrania gotowych plików, z dwoma kodowaniami utf-8 i iso-8859-2. Ze względu na opisy i informację którymi raczy nas ten skrypt, u mieściłem gotowe pliki w dwóch kodowania, chodź wiem że większość serwerów ma ustalone kodowanie iso, to są też takie gdzie jest utf-8, zresztą sam na komputerze mam takie ustawione w konsoli :) .

Dzięki wielkie, przydało mi się.

Dziękuje również, za wyrazy uznania dla mojego skromnego tworu :D .

banner420x60.png


#12 MisieQ

MisieQ

    Nowy

  • Użytkownik
  • 1 postów

Napisano 01 April 2012 - 19:36

minecraft@zion:~$ ./mc.sh start
./mc.sh: line 68: ścieżki: nie znaleziono polecenia
./mc.sh: line 71: backup: nie znaleziono polecenia
./mc.sh: line 77: błąd składni przy nieoczekiwanym znaczniku `screen'
./mc.sh: line 77: `screen'


;]

#13 Maran

Maran

    Nowy

  • Użytkownik
  • 64 postów
  • marcinsan

Napisano 01 April 2012 - 20:31

Przepraszam czy skopiowałeś dokładnie cały skrypt? Czy tylko jego część? Możesz oczywiście skorzystać z gotowych plików których linki są umieszczone na końcu pierwszego postu. Pamiętaj jednak że pliki należy edytować i skonfigurować, w sekcji konfiguracyjnej skryptu, a posiłkować się możesz poradnikiem z pierwszego postu.

banner420x60.png


#14 gaculu

gaculu

    Znawca

  • Użytkownik
  • 397 postów
  • gaculu

Napisano 12 April 2012 - 09:55

Ja korzystam z troszku innego - plugin napisany do bukkita. W sumie działa na tej samej zasadzie a plik konfiguracyjny jest prawie identyczny jak twój :) Dobra robota :)
Zamiast startować bukkita startuję ten plugin a on dopiero kontroluje bukkita :)

Zapraszam na https://minespace.eu 

Adres IP serwera: mc.minespace.eu 


#15 Maran

Maran

    Nowy

  • Użytkownik
  • 64 postów
  • marcinsan

Napisano 12 April 2012 - 16:09

Dzięki za uznanie :D , ale to nie jest plugin do serwera, lecz skrypt bash. On po prostu zawiera zbiór instrukcji, które wykonuje za nas w konsoli linuxa. W zależności od opcji ustawionych w sekcji konfiguracyjnej tego skryptu oraz parametru z którym, odpalamy ten skrypt.

banner420x60.png


#16 irth

irth

    Początk. Programista

  • Użytkownik
  • 115 postów

Napisano 24 June 2012 - 20:30

Hej mam problem, mam komunikat, że nie znaleziono polecenia "screen" (Linux Kubuntu 12.04 amd64)
KTO TO OTWORZY TEN JEST KOKSEM, JAK: Geroo, Karol350, xmenmax, Bziq, zbrojny120, grzdylek, bezio22, BaDgEr.

#17 Maran

Maran

    Nowy

  • Użytkownik
  • 64 postów
  • marcinsan

Napisano 25 June 2012 - 11:17

Witam.
Masz w ogóle zainstalowanego screena?
Jeśli nie, to zainstaluj go komendą
apt-get install screen

banner420x60.png


#18 irth

irth

    Początk. Programista

  • Użytkownik
  • 115 postów

Napisano 25 June 2012 - 12:32

Jestem gupi. Co ciekawe wpisałem tę komendę, a apt mnie nawet nie zapytał czy napewno instalować... Już nikogo nie obchodzi moje zdanie... :( :D
KTO TO OTWORZY TEN JEST KOKSEM, JAK: Geroo, Karol350, xmenmax, Bziq, zbrojny120, grzdylek, bezio22, BaDgEr.

#19 Ziutekkk

Ziutekkk

    Nowy

  • Użytkownik
  • 38 postów

Napisano 25 June 2012 - 17:23

Świetny skrypt, skoro już ktoś odkopał to opiszę swój problem, który występuję gdy chce zrobić restart skryptem:
18:15:29 [INFO] Starting minecraft server version 1.2.5
18:15:29 [INFO] Loading properties
18:15:29 [INFO] Starting Minecraft server on xx.xx.xxx.xx:xxxxx
18:15:29 [WARNING] **** FAILED TO BIND TO PORT!
18:15:29 [WARNING] The exception was: java.net.BindException: Address already in use
18:15:29 [WARNING] Perhaps a server is already running on that port?
>
Myślę, że to konflikt z programem screen. Może poprzednia sesja się jeszcze nie zakończyła a już otwiera się następna?
Duplikuje mi się też sesje, mam 2 sesje screen o tej samej nazwie
Dzięki, skrypt bardzo fajny

#20 Maran

Maran

    Nowy

  • Użytkownik
  • 64 postów
  • marcinsan

Napisano 25 June 2012 - 17:55

Dokładnie, tak jak piszesz. Aby to naprawić, do funkcji restart w skrypcie (zaraz pod "pd"), należy dopisać "sleep 1"
Ta funkcja, ma Tak mniej więcej wyglądać:
function restart # funkcja zatrzymująca serwer na potrzeby restartu
{
  if [ -e mc.pid ];then
   if ( kill -0 $(cat mc.pid) 2> /dev/null );then
   while [ $r -ge 1 ];do
    sleep 1
    t=$((r--))
    screen -S $scrname -p $vtermname -X stuff "say $info_restart $t"`echo -ne '\015'`
    echo $info_restart $t
   done
sleep 1
   echo -e "\\033[1mSerwer Minecraft został zatrzymany\\033[0m"
   kill -KILL $(cat mc.pid)
   fi
   pd
sleep 1
  else
   echo -e "\\033[1;31mSerwer nie działa (brakuje pliku z numerem procesu \"mc.pid\")\\033[0m"
   exit 5
  fi
}
Czyli pomiędy
pd
a
else
wpisujemy
sleep 1

banner420x60.png