• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Ich habe problem

T

Techtory

Guest
Hi Community,

ich habe ein Problem und zwar habe ich mir um alle Server und BungeeCord zu starten eine Steuerung.sh im /home verzeichniss auf meinem VServer erstellt.

Erstens: ich habe keine Konsole!! Das heißt wenn ich alles starte komme ich nich automatisch in eine Konsole sondern bleibe im normal system.

Programm:

Code:
#!/bin/bash

INSTANZ="Steuerung"

BPDIR1=/home/BungeeCord/

BPDIR2=/home/Server1/

BPDIR3=/home/Server2

Pidfile=/home/Steuerung.pid



if[-f$Pidfile]

then

       Pid=`cat$Pidfile`

fi



case"$1"in

'start')

               if[-f$Pidfile];then

                               if test `ps -e|grep -c $Pid`=1;then

                                               echo"$INSTANZ wird nicht ausgeführt - Anwendung läuft bereits mit P$

                               else

                                               echo"Starte Bungee $INSTANZ"

                                               cd$BPDIR1

                                               nohup ./start.sh &>/dev/null &

                                               echo$!>$Pidfile

                                               echo"Starte Lobby $INSTANZ"

                                               cd$BPDIR2

                                               nohup ./start.sh &>/dev/null &

                                               echo$!>$Pidfile

                                               echo"Starte Wirtschaft $INSTANZ"

                                               cd$BPDIR3

                                               nohup .start.sh &>/dev/null&

                                               echo$!>$Pidfile

                               fi

               else

                               echo"Starte Bungee $INSTANZ"

                               cd$BPDIR1

                               nohup ./start.sh &> /dev/null&

                                               echo$!>$Pidfile

                                               echo"Starte Lobby $INSTANZ"

                                               cd$BPDIR2

                                               nohup ./start.sh &>/dev/null &

                                               echo$!>$Pidfile

                                               echo"Starte Wirtschaft $INSTANZ"

                                               cd$BPDIR3

                                               nohup .start.sh &>/dev/null&

                                               echo$!>$Pidfile

                               fi

               else

                               echo"Starte Bungee $INSTANZ"

                               cd$BPDIR1

                               nohup ./start.sh &> /dev/null&

                               echo$!>$Pidfile

                               echo"Starte Lobby $INSTANZ"

                               cd$BPDIR2

                               nohup ./start.sh &> /dev/null&

                               echo$!>$Pidfile

                               echo"Starte Wirtschaft $INSTANZ"

                               cd$BPDIR3

                               nohup ./start.sh &> /dev/null&

                               echo$!>$Pidfile

               fi

               ;;



'stop')

               if[-f$Pidfile];then

                               echo"stopping $INSTANZ"

                               cd$BPDIR1

                               nohup ./stop.sh &> /dev/null&

                               echo$!>$Pidfile

                               echo"stopping $INSTANZ"

                               cd$BPDIR2

                               nohup ./stop.sh &> /dev/null&

                               echo$!>$Pidfile

                               echo"stopping $INSTANZ"

                               cd$BPDIR3

                               nohup ./stop.sh &> /dev/null&

                               echo$!>$Pidfile

               else

                               echo"Kann $INSTANZ nicht stoppen - die Pidfile wurde nicht gefunden!"

               fi

               ;;



'restart')

               $0 stop

               sleep 30

               $0 start

               ;;



*)

               echo"usage: $0 { start | stop | restart}"

               ;;



esac

exit 0

Zweitens: Ich kann nur mit dem Port vom ersten Server joinen.

BungeeCord-Config:



Code:
listeners:

- max_players: 100

priorities:

- server

host: 37.228.139.11:25580

tab_size: 60

force_default_server: true

bind_local_address: true

ping_passthrough: false

tab_list: GLOBAL_PING

motd: '&1Techtory-Wirtschaft,PVP und mehr!!'

query_enabled: false

query_port: 25577

forced_hosts:

   pvp.md-5.net: pvp

disabled_commands:

- disabledcommandhere

network_compression_threshold: 256

groups:

  md_5:

- admin

connection_throttle: 4000

stats: c678ce43-9d63-4a86-ab6c-de9d94cba4c3

(Stats: Ich war schon mal on)

Drittens: Bis auf ein paar standart Befehle lässt es selbst die ausgesuchten Befehle nicht zu!!

Viertens:

Wenn ich neustarte oder stope und starte um einen Ordner von einem Plugin zu laden, erstellt dieser sich nicht.





Es ist eine lange Nachricht aber ich hoffe mir kann jemand helfen.

Kontakte:

Im Forum unter PN.

oder drunter

E-Mail: techtory01@gmail.com







Mit freundlichen Grüßen

Euer Jan!!!!
 
Zuletzt bearbeitet von einem Moderator:

DarkPrincess

Kuhfänger
Registriert
31 August 2013
Beiträge
52
Diamanten
0
Da du eh nur start/stop/restart drin hast, würde ich dir empfehlen es per CronJob starten zu lassen.

Kleines Bash Script mit MySQL ( speichern auf dem Server unter autostart oder wie man möchte ):
Code:
#!/bin/bash

HOST="127.0.0.1";
USER="root benutzer hier";
PASS="root passwort hier";
DB="datenbank hier";

#Ab hier brauch nichts mehr geändert werden
SNAME="";
SNICE="";
SPFAD="";
SPAR1="";
SPAR2="";
SMJAR="";
SDAEM="";

DATE=$(date +%d.%m.%y-%H:%M:%S);
LOGDATEFOLD=$(date +%m.%y);

SERVERSTART() {
    if [[ `screen -ls |grep "$SNAME"` ]]; then
        echo "found running prozess: $SNAME"
        echo "Dont start the Server twice"
        exit 1
    else
        if [ "$UID" = "0" ]; then
            echo WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
            for c in $(seq 1 5); do
                echo -n "!"
                sleep 1
            done
            echo !
        fi
        echo "starting the $SDESC"
        if [ -d "$HOME$SPFAD" ]; then
            cd "$HOME$SPFAD"
            if [ ! -x $SMJAR ]; then
                echo "$SMJAR is not executable, trying to set it"
                chmod u+x $SMJAR
            fi
            echo "starte server im screen mode"
            screen -dmS ${SNAME} ${SNICE} ${SDAEM} ${SPAR1} -jar ${SMJAR} ${SPAR2}
        else
            echo "No such directory: $HOME$SPFAD!"
        fi
    fi
}

CLEARLOG() {
    cd "$HOME$SPFAD"
    if [ ! -d "./log" ];
    then
        mkdir log
    fi
    cd log
    if [ ! -d "./$LOGDATEFOLD" ];
    then
        mkdir "$LOGDATEFOLD"
    fi
    cd ..
    mv ./"$SLOGNAME"."$SLOGEND" ./log/"$LOGDATEFOLD"/"$SLOGNAME"_"$DATE"."$SLOGEND"
    touch "$SLOGNAME"."$SLOGEND"
}

screen -wipe

while IFS=$'\t' read name path jar parameter1 parameter2 nice changelog logfile logend java;
do
    PID=`ps -ef | grep -v grep | grep ${jar} | awk '{ print $2 }'`
    if [ "$PID" = "" ]; then
        SNAME=${name};
        SNICE=${nice};
        SPFAD=${path};
        SPAR1=${parameter1};
        SPAR2=${parameter2};
        SMJAR=${jar};
        SDAEM=${java};
        if [ ${changelog} -eq 1 ]; then
            SLOGNAME=${logfile};
            SLOGEND=${logend};
            CLEARLOG
        fi
        SERVERSTART
#        echo "Starte $SNAME neu.";
    fi
done < <(mysql -BNr -h${HOST} -u${USER} -p${PASS} ${DB} -e "SELECT name,path,jar,parameter1,parameter2,nice,changelog,logfile,logend,java FROM servers WHERE autostart='1'");

exit 0;


Datenbank erstellen wie folgt:
Code:
DROP TABLE IF EXISTS `servers`;
CREATE TABLE `servers` (
  `name` varchar(32) NOT NULL,
  `path` varchar(255) NOT NULL,
  `jar` varchar(64) NOT NULL,
  `parameter1` varchar(255) NOT NULL,
  `parameter2` varchar(255) NOT NULL,
  `nice` varchar(32) NOT NULL DEFAULT 'nice -n 0',
  `changelog` enum('0','1') NOT NULL DEFAULT '0',
  `logfile` varchar(32) NOT NULL DEFAULT 'none',
  `logend` varchar(5) NOT NULL DEFAULT 'none',
  `java` varchar(255) NOT NULL,
  `autostart` enum('0','1') NOT NULL DEFAULT '0',
  PRIMARY KEY (`name`)
);

Erklärung der Spalten:
name = Der Name für den Screen Namen um später so den Server mit screen -r (name) öffnen zu können ( Konsole )
path = Der Pfad zu Hauptverzeichnis des Servers
jar = Die *.jar Datei welche verwendet werden soll
parameter1 = Für Java parameter wie "-server -Xmx2048M -Xms2048M"
parameter2 = Zur Angabe von Spigot und co Parameter wie "--host 127.0.0.1 --port 25650 nogui"
nice = Prioritäten Level für Linux ( Angabe wie folgt wenn gewünscht "nice -n (Zahl)" )
changelog = Log kopieren in History 0 = Nein / Ja = 1
logfile = Name der Log File, seit 1.8 oder so bei Spigot/Bukkit z.B. "logs/latest"
logend = Endung der Log file, meistens "log"
java = Pfad zum Java oder einfach java für den Befehl.
autostart = 0 = Starte Server nicht / 1 = Starte Server wenn erforderlich.

Bitte beachte das jedes Feld auch wenn es nicht gebraucht wird, irgendwas drin steht.

Jetzt nur noch screen installieren ( Unter Debian apt-get update && apt-get upgrade && apt-get dist-upgrade && apt-get install screen ) und den CronJob erstellen.

Unter Debian:
Code:
crontab -e

und dann dort einfügen :
Code:
#Min.   Hour    D.o.M   Mon.    D.o.W   Command
*/1     *       *       *       *       Pfad_zur_Start_Datei & >/dev/null 2>&1


Alle Angaben ohne Gewähr.

Hoffe habe nichts vergessen jetzt ;-)

P.S. Sobald der/die Server läuft/laufen, kannst du mit "screen -r (name aus der Datenbank auf die Konsole)" zugreifen.
Zum Neustarten wie gewohnt /stop im Spiel.
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Da du eh nur start/stop/restart drin hast, würde ich dir empfehlen es per CronJob starten zu lassen.

Kleines Bash Script mit MySQL ( speichern auf dem Server unter autostart oder wie man möchte ):
Code:
#!/bin/bash

HOST="127.0.0.1";
USER="root benutzer hier";
PASS="root passwort hier";
DB="datenbank hier";

#Ab hier brauch nichts mehr geändert werden
SNAME="";
SNICE="";
SPFAD="";
SPAR1="";
SPAR2="";
SMJAR="";
SDAEM="";

DATE=$(date +%d.%m.%y-%H:%M:%S);
LOGDATEFOLD=$(date +%m.%y);

SERVERSTART() {
    if [[ `screen -ls |grep "$SNAME"` ]]; then
        echo "found running prozess: $SNAME"
        echo "Dont start the Server twice"
        exit 1
    else
        if [ "$UID" = "0" ]; then
            echo WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
            for c in $(seq 1 5); do
                echo -n "!"
                sleep 1
            done
            echo !
        fi
        echo "starting the $SDESC"
        if [ -d "$HOME$SPFAD" ]; then
            cd "$HOME$SPFAD"
            if [ ! -x $SMJAR ]; then
                echo "$SMJAR is not executable, trying to set it"
                chmod u+x $SMJAR
            fi
            echo "starte server im screen mode"
            screen -dmS ${SNAME} ${SNICE} ${SDAEM} ${SPAR1} -jar ${SMJAR} ${SPAR2}
        else
            echo "No such directory: $HOME$SPFAD!"
        fi
    fi
}

CLEARLOG() {
    cd "$HOME$SPFAD"
    if [ ! -d "./log" ];
    then
        mkdir log
    fi
    cd log
    if [ ! -d "./$LOGDATEFOLD" ];
    then
        mkdir "$LOGDATEFOLD"
    fi
    cd ..
    mv ./"$SLOGNAME"."$SLOGEND" ./log/"$LOGDATEFOLD"/"$SLOGNAME"_"$DATE"."$SLOGEND"
    touch "$SLOGNAME"."$SLOGEND"
}

screen -wipe

while IFS=$'\t' read name path jar parameter1 parameter2 nice changelog logfile logend java;
do
    PID=`ps -ef | grep -v grep | grep ${jar} | awk '{ print $2 }'`
    if [ "$PID" = "" ]; then
        SNAME=${name};
        SNICE=${nice};
        SPFAD=${path};
        SPAR1=${parameter1};
        SPAR2=${parameter2};
        SMJAR=${jar};
        SDAEM=${java};
        if [ ${changelog} -eq 1 ]; then
            SLOGNAME=${logfile};
            SLOGEND=${logend};
            CLEARLOG
        fi
        SERVERSTART
#        echo "Starte $SNAME neu.";
    fi
done < <(mysql -BNr -h${HOST} -u${USER} -p${PASS} ${DB} -e "SELECT name,path,jar,parameter1,parameter2,nice,changelog,logfile,logend,java FROM servers WHERE autostart='1'");

exit 0;


Datenbank erstellen wie folgt:
Code:
DROP TABLE IF EXISTS `servers`;
CREATE TABLE `servers` (
  `name` varchar(32) NOT NULL,
  `path` varchar(255) NOT NULL,
  `jar` varchar(64) NOT NULL,
  `parameter1` varchar(255) NOT NULL,
  `parameter2` varchar(255) NOT NULL,
  `nice` varchar(32) NOT NULL DEFAULT 'nice -n 0',
  `changelog` enum('0','1') NOT NULL DEFAULT '0',
  `logfile` varchar(32) NOT NULL DEFAULT 'none',
  `logend` varchar(5) NOT NULL DEFAULT 'none',
  `java` varchar(255) NOT NULL,
  `autostart` enum('0','1') NOT NULL DEFAULT '0',
  PRIMARY KEY (`name`)
);

Erklärung der Spalten:
name = Der Name für den Screen Namen um später so den Server mit screen -r (name) öffnen zu können ( Konsole )
path = Der Pfad zu Hauptverzeichnis des Servers
jar = Die *.jar Datei welche verwendet werden soll
parameter1 = Für Java parameter wie "-server -Xmx2048M -Xms2048M"
parameter2 = Zur Angabe von Spigot und co Parameter wie "--host 127.0.0.1 --port 25650 nogui"
nice = Prioritäten Level für Linux ( Angabe wie folgt wenn gewünscht "nice -n (Zahl)" )
changelog = Log kopieren in History 0 = Nein / Ja = 1
logfile = Name der Log File, seit 1.8 oder so bei Spigot/Bukkit z.B. "logs/latest"
logend = Endung der Log file, meistens "log"
java = Pfad zum Java oder einfach java für den Befehl.
autostart = 0 = Starte Server nicht / 1 = Starte Server wenn erforderlich.

Bitte beachte das jedes Feld auch wenn es nicht gebraucht wird, irgendwas drin steht.

Jetzt nur noch screen installieren ( Unter Debian apt-get update && apt-get upgrade && apt-get dist-upgrade && apt-get install screen ) und den CronJob erstellen.

Unter Debian:
Code:
crontab -e

und dann dort einfügen :
Code:
#Min.   Hour    D.o.M   Mon.    D.o.W   Command
*/1     *       *       *       *       Pfad_zur_Start_Datei & >/dev/null 2>&1


Alle Angaben ohne Gewähr.

Hoffe habe nichts vergessen jetzt ;-)

P.S. Sobald der/die Server läuft/laufen, kannst du mit "screen -r (name aus der Datenbank auf die Konsole)" zugreifen.
Zum Neustarten wie gewohnt /stop im Spiel.
Sorry aber das ist totaler Overkill. Linux hat genug Tools um zu verhindern, dass man eine Anwendung mehrfach startet. Dein Skript ist zwar nicht schlecht aber wie gesagt, absolut unnötig so einen riesen Aufwand zu betreiben.

Zum Problem des TE kann ich aber auch nur sagen: Du scheinst absolut nicht zu verstehen was dein Skript da überhaupt tut und ich vermute, das hast du irgendwo einfach kopiert und jetzt hast du halt keine Ahnung warum es das tut was es tut. Ich seh da aber auch keine Hoffnung dir hier schnell helfen zu können. Fertige Skripte gibt es im Internet und da dir absolut die Grundlagen fehlen macht es wohl auch wenig Sinn dir zu erklären wo dein Problem liegt. Davon abgesehen versteh ich nicht mal wo dein Problem überhaupt ist und ich glaub du auch nicht wirklich. Das ist halt der Grund warum ein eigener Server billiger ist als ein Gameserver: Man muss die Arbeit selbst machen.

Ansonsten kannst du aber gerne nochmal erklären was du von deinem Skript erwartest und was es stattdessen tut.
 

DarkPrincess

Kuhfänger
Registriert
31 August 2013
Beiträge
52
Diamanten
0
Sorry aber das ist totaler Overkill. Linux hat genug Tools um zu verhindern, dass man eine Anwendung mehrfach startet. Dein Skript ist zwar nicht schlecht aber wie gesagt, absolut unnötig so einen riesen Aufwand zu betreiben.

Naja ich brauch es so bei mir, da ich so offline Server im Netzwerk so starten lassen kann mit einem Bungeecord Plugin welches den Autostart wert auf 1 setzt ;-) Und es jetzt extra umzuschreiben extra, nee danke ;-) Ausserdem kann man so die Start Option und co auch noch per PHP z.B. steuern wenn man das passende WebScript dazu schreibt ;-)
 
T

Techtory

Guest
Sorry aber das ist totaler Overkill. Linux hat genug Tools um zu verhindern, dass man eine Anwendung mehrfach startet. Dein Skript ist zwar nicht schlecht aber wie gesagt, absolut unnötig so einen riesen Aufwand zu betreiben.

Zum Problem des TE kann ich aber auch nur sagen: Du scheinst absolut nicht zu verstehen was dein Skript da überhaupt tut und ich vermute, das hast du irgendwo einfach kopiert und jetzt hast du halt keine Ahnung warum es das tut was es tut. Ich seh da aber auch keine Hoffnung dir hier schnell helfen zu können. Fertige Skripte gibt es im Internet und da dir absolut die Grundlagen fehlen macht es wohl auch wenig Sinn dir zu erklären wo dein Problem liegt. Davon abgesehen versteh ich nicht mal wo dein Problem überhaupt ist und ich glaub du auch nicht wirklich. Das ist halt der Grund warum ein eigener Server billiger ist als ein Gameserver: Man muss die Arbeit selbst machen.

Ansonsten kannst du aber gerne nochmal erklären was du von deinem Skript erwartest und was es stattdessen tut.

Mein Problem is das ich an keine konsole komme! Und somit der swrver zwar startet stop etc. Ich aber keine konsole bekomme. Dies sollte die einzelnen start.sh ersetzten!!
 

DarkPrincess

Kuhfänger
Registriert
31 August 2013
Beiträge
52
Diamanten
0
Ich kenne mich schon damit aus, und es nich nur billiger sondern man kann auch servernetzwerke nicht nur ein server machen!!

Wenn du dich auskennst, dann kannst du diesen Code lesen und dir die stellen dort herauslesen wenn du es nicht schaffst die Man Seite von Screen zu lesen.
Code:
#!/bin/bash
HOST="127.0.0.1";
USER="root benutzer hier";
PASS="root passwort hier";
DB="datenbank hier";
#Ab hier brauch nichts mehr geändert werden
SNAME="";
SNICE="";
SPFAD="";
SPAR1="";
SPAR2="";
SMJAR="";
SDAEM="";
DATE=$(date +%d.%m.%y-%H:%M:%S);
LOGDATEFOLD=$(date +%m.%y);
SERVERSTART() {
    if [[ `screen -ls |grep "$SNAME"` ]]; then
        echo "found running prozess: $SNAME"
        echo "Dont start the Server twice"
        exit 1
    else
        if [ "$UID" = "0" ]; then
            echo WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
            for c in $(seq 1 5); do
                echo -n "!"
                sleep 1
            done
            echo !
        fi
        echo "starting the $SDESC"
        if [ -d "$HOME$SPFAD" ]; then
            cd "$HOME$SPFAD"
            if [ ! -x $SMJAR ]; then
                echo "$SMJAR is not executable, trying to set it"
                chmod u+x $SMJAR
            fi
            echo "starte server im screen mode"
            screen -dmS ${SNAME} ${SNICE} ${SDAEM} ${SPAR1} -jar ${SMJAR} ${SPAR2}
        else
            echo "No such directory: $HOME$SPFAD!"
        fi
    fi
}
CLEARLOG() {
    cd "$HOME$SPFAD"
    if [ ! -d "./log" ];
    then
        mkdir log
    fi
    cd log
    if [ ! -d "./$LOGDATEFOLD" ];
    then
        mkdir "$LOGDATEFOLD"
    fi
    cd ..
    mv ./"$SLOGNAME"."$SLOGEND" ./log/"$LOGDATEFOLD"/"$SLOGNAME"_"$DATE"."$SLOGEND"
    touch "$SLOGNAME"."$SLOGEND"
}
screen -wipe
while IFS=$'\t' read name path jar parameter1 parameter2 nice changelog logfile logend java;
do
    PID=`ps -ef | grep -v grep | grep ${jar} | awk '{ print $2 }'`
    if [ "$PID" = "" ]; then
        SNAME=${name};
        SNICE=${nice};
        SPFAD=${path};
        SPAR1=${parameter1};
        SPAR2=${parameter2};
        SMJAR=${jar};
        SDAEM=${java};
        if [ ${changelog} -eq 1 ]; then
            SLOGNAME=${logfile};
            SLOGEND=${logend};
            CLEARLOG
        fi
        SERVERSTART
#        echo "Starte $SNAME neu.";
    fi
done < <(mysql -BNr -h${HOST} -u${USER} -p${PASS} ${DB} -e "SELECT name,path,jar,parameter1,parameter2,nice,changelog,logfile,logend,java FROM servers WHERE autostart='1'");
exit 0;

Wir sind nicht hier die Arbeit für dich zu machen. Wir helfen aber machen es nicht für dich.
 
Oben