Programm Ich habe problem

Dieses Thema im Forum "Programmierung" wurde erstellt von Techtory, 3. April 2016.

  1. Techtory
    Offline

    Techtory

    Registriert seit:
    22. März 2016
    Beiträge:
    20
    Ort:
    Ein Örtchen in Bayern :D
    Minecraft:
    granatapfelLP
    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 (Text):
    1. #!/bin/bash
    2.  
    3. INSTANZ="Steuerung"
    4.  
    5. BPDIR1=/home/BungeeCord/
    6.  
    7. BPDIR2=/home/Server1/
    8.  
    9. BPDIR3=/home/Server2
    10.  
    11. Pidfile=/home/Steuerung.pid
    12.  
    13.  
    14.  
    15. if[-f$Pidfile]
    16.  
    17. then
    18.  
    19.        Pid=`cat$Pidfile`
    20.  
    21. fi
    22.  
    23.  
    24.  
    25. case"$1"in
    26.  
    27. 'start')
    28.  
    29.                if[-f$Pidfile];then
    30.  
    31.                                if test `ps -e|grep -c $Pid`=1;then
    32.  
    33.                                                echo"$INSTANZ wird nicht ausgeführt - Anwendung läuft bereits mit P$
    34.  
    35.                                else
    36.  
    37.                                                echo"Starte Bungee $INSTANZ"
    38.  
    39.                                                cd$BPDIR1
    40.  
    41.                                                nohup ./start.sh &>/dev/null &
    42.  
    43.                                                echo$!>$Pidfile
    44.  
    45.                                                echo"Starte Lobby $INSTANZ"
    46.  
    47.                                                cd$BPDIR2
    48.  
    49.                                                nohup ./start.sh &>/dev/null &
    50.  
    51.                                                echo$!>$Pidfile
    52.  
    53.                                                echo"Starte Wirtschaft $INSTANZ"
    54.  
    55.                                                cd$BPDIR3
    56.  
    57.                                                nohup .start.sh &>/dev/null&
    58.  
    59.                                                echo$!>$Pidfile
    60.  
    61.                                fi
    62.  
    63.                else
    64.  
    65.                                echo"Starte Bungee $INSTANZ"
    66.  
    67.                                cd$BPDIR1
    68.  
    69.                                nohup ./start.sh &> /dev/null&
    70.  
    71.                                                echo$!>$Pidfile
    72.  
    73.                                                echo"Starte Lobby $INSTANZ"
    74.  
    75.                                                cd$BPDIR2
    76.  
    77.                                                nohup ./start.sh &>/dev/null &
    78.  
    79.                                                echo$!>$Pidfile
    80.  
    81.                                                echo"Starte Wirtschaft $INSTANZ"
    82.  
    83.                                                cd$BPDIR3
    84.  
    85.                                                nohup .start.sh &>/dev/null&
    86.  
    87.                                                echo$!>$Pidfile
    88.  
    89.                                fi
    90.  
    91.                else
    92.  
    93.                                echo"Starte Bungee $INSTANZ"
    94.  
    95.                                cd$BPDIR1
    96.  
    97.                                nohup ./start.sh &> /dev/null&
    98.  
    99.                                echo$!>$Pidfile
    100.  
    101.                                echo"Starte Lobby $INSTANZ"
    102.  
    103.                                cd$BPDIR2
    104.  
    105.                                nohup ./start.sh &> /dev/null&
    106.  
    107.                                echo$!>$Pidfile
    108.  
    109.                                echo"Starte Wirtschaft $INSTANZ"
    110.  
    111.                                cd$BPDIR3
    112.  
    113.                                nohup ./start.sh &> /dev/null&
    114.  
    115.                                echo$!>$Pidfile
    116.  
    117.                fi
    118.  
    119.                ;;
    120.  
    121.  
    122.  
    123. 'stop')
    124.  
    125.                if[-f$Pidfile];then
    126.  
    127.                                echo"stopping $INSTANZ"
    128.  
    129.                                cd$BPDIR1
    130.  
    131.                                nohup ./stop.sh &> /dev/null&
    132.  
    133.                                echo$!>$Pidfile
    134.  
    135.                                echo"stopping $INSTANZ"
    136.  
    137.                                cd$BPDIR2
    138.  
    139.                                nohup ./stop.sh &> /dev/null&
    140.  
    141.                                echo$!>$Pidfile
    142.  
    143.                                echo"stopping $INSTANZ"
    144.  
    145.                                cd$BPDIR3
    146.  
    147.                                nohup ./stop.sh &> /dev/null&
    148.  
    149.                                echo$!>$Pidfile
    150.  
    151.                else
    152.  
    153.                                echo"Kann $INSTANZ nicht stoppen - die Pidfile wurde nicht gefunden!"
    154.  
    155.                fi
    156.  
    157.                ;;
    158.  
    159.  
    160.  
    161. 'restart')
    162.  
    163.                $0 stop
    164.  
    165.                sleep 30
    166.  
    167.                $0 start
    168.  
    169.                ;;
    170.  
    171.  
    172.  
    173. *)
    174.  
    175.                echo"usage: $0 { start | stop | restart}"
    176.  
    177.                ;;
    178.  
    179.  
    180.  
    181. esac
    182.  
    183. exit 0
    Zweitens: Ich kann nur mit dem Port vom ersten Server joinen.

    BungeeCord-Config:



    Code (Text):
    1. listeners:
    2.  
    3. - max_players: 100
    4.  
    5. priorities:
    6.  
    7. - server
    8.  
    9. host: 37.228.139.11:25580
    10.  
    11. tab_size: 60
    12.  
    13. force_default_server: true
    14.  
    15. bind_local_address: true
    16.  
    17. ping_passthrough: false
    18.  
    19. tab_list: GLOBAL_PING
    20.  
    21. motd: '&1Techtory-Wirtschaft,PVP und mehr!!'
    22.  
    23. query_enabled: false
    24.  
    25. query_port: 25577
    26.  
    27. forced_hosts:
    28.  
    29.    pvp.md-5.net: pvp
    30.  
    31. disabled_commands:
    32.  
    33. - disabledcommandhere
    34.  
    35. network_compression_threshold: 256
    36.  
    37. groups:
    38.  
    39.   md_5:
    40.  
    41. - admin
    42.  
    43. connection_throttle: 4000
    44.  
    45. 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!!!!
     
    #1
  2. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    Bitte Formatier das ganze mal im
    Code (Text):
    1.  oder im pastebin , so kann das doch keiner lesen. Danke.
     
    #2
  3. Techtory
    Offline

    Techtory

    Registriert seit:
    22. März 2016
    Beiträge:
    20
    Ort:
    Ein Örtchen in Bayern :D
    Minecraft:
    granatapfelLP
    Habe ich gemacht!!
    Bitte antworte mir!
     
    #3
  4. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    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 (Text):
    1. #!/bin/bash
    2.  
    3. HOST="127.0.0.1";
    4. USER="root benutzer hier";
    5. PASS="root passwort hier";
    6. DB="datenbank hier";
    7.  
    8. #Ab hier brauch nichts mehr geändert werden
    9. SNAME="";
    10. SNICE="";
    11. SPFAD="";
    12. SPAR1="";
    13. SPAR2="";
    14. SMJAR="";
    15. SDAEM="";
    16.  
    17. DATE=$(date +%d.%m.%y-%H:%M:%S);
    18. LOGDATEFOLD=$(date +%m.%y);
    19.  
    20. SERVERSTART() {
    21.     if [[ `screen -ls |grep "$SNAME"` ]]; then
    22.         echo "found running prozess: $SNAME"
    23.         echo "Dont start the Server twice"
    24.         exit 1
    25.     else
    26.         if [ "$UID" = "0" ]; then
    27.             echo WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
    28.             for c in $(seq 1 5); do
    29.                 echo -n "!"
    30.                 sleep 1
    31.             done
    32.             echo !
    33.         fi
    34.         echo "starting the $SDESC"
    35.         if [ -d "$HOME$SPFAD" ]; then
    36.             cd "$HOME$SPFAD"
    37.             if [ ! -x $SMJAR ]; then
    38.                 echo "$SMJAR is not executable, trying to set it"
    39.                 chmod u+x $SMJAR
    40.             fi
    41.             echo "starte server im screen mode"
    42.             screen -dmS ${SNAME} ${SNICE} ${SDAEM} ${SPAR1} -jar ${SMJAR} ${SPAR2}
    43.         else
    44.             echo "No such directory: $HOME$SPFAD!"
    45.         fi
    46.     fi
    47. }
    48.  
    49. CLEARLOG() {
    50.     cd "$HOME$SPFAD"
    51.     if [ ! -d "./log" ];
    52.     then
    53.         mkdir log
    54.     fi
    55.     cd log
    56.     if [ ! -d "./$LOGDATEFOLD" ];
    57.     then
    58.         mkdir "$LOGDATEFOLD"
    59.     fi
    60.     cd ..
    61.     mv ./"$SLOGNAME"."$SLOGEND" ./log/"$LOGDATEFOLD"/"$SLOGNAME"_"$DATE"."$SLOGEND"
    62.     touch "$SLOGNAME"."$SLOGEND"
    63. }
    64.  
    65. screen -wipe
    66.  
    67. while IFS=$'\t' read name path jar parameter1 parameter2 nice changelog logfile logend java;
    68. do
    69.     PID=`ps -ef | grep -v grep | grep ${jar} | awk '{ print $2 }'`
    70.     if [ "$PID" = "" ]; then
    71.         SNAME=${name};
    72.         SNICE=${nice};
    73.         SPFAD=${path};
    74.         SPAR1=${parameter1};
    75.         SPAR2=${parameter2};
    76.         SMJAR=${jar};
    77.         SDAEM=${java};
    78.         if [ ${changelog} -eq 1 ]; then
    79.             SLOGNAME=${logfile};
    80.             SLOGEND=${logend};
    81.             CLEARLOG
    82.         fi
    83.         SERVERSTART
    84. #        echo "Starte $SNAME neu.";
    85.     fi
    86. 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'");
    87.  
    88. exit 0;

    Datenbank erstellen wie folgt:
    Code (Text):
    1. DROP TABLE IF EXISTS `servers`;
    2. CREATE TABLE `servers` (
    3.   `name` varchar(32) NOT NULL,
    4.   `path` varchar(255) NOT NULL,
    5.   `jar` varchar(64) NOT NULL,
    6.   `parameter1` varchar(255) NOT NULL,
    7.   `parameter2` varchar(255) NOT NULL,
    8.   `nice` varchar(32) NOT NULL DEFAULT 'nice -n 0',
    9.   `changelog` enum('0','1') NOT NULL DEFAULT '0',
    10.   `logfile` varchar(32) NOT NULL DEFAULT 'none',
    11.   `logend` varchar(5) NOT NULL DEFAULT 'none',
    12.   `java` varchar(255) NOT NULL,
    13.   `autostart` enum('0','1') NOT NULL DEFAULT '0',
    14.   PRIMARY KEY (`name`)
    15. );
    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 (Text):
    1. crontab -e
    und dann dort einfügen :
    Code (Text):
    1. #Min.   Hour    D.o.M   Mon.    D.o.W   Command
    2. */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.
     
    #4
    MaxCode gefällt das.
  5. Techtory
    Offline

    Techtory

    Registriert seit:
    22. März 2016
    Beiträge:
    20
    Ort:
    Ein Örtchen in Bayern :D
    Minecraft:
    granatapfelLP
    Das heißt ich mache eine neu .sh und erstetze die durch den ersten code.?? Musst wissen bin nicht ganz so gut in so was....
     
    #5
  6. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    Bitte lies die Sätze die man auch geschrieben hat und schau nicht nur auf die Code Ausschnitte.Danke ;-)
     
    #6
  7. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    654
    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.
     
    #7
  8. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    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 ;-)
     
    #8
  9. Techtory
    Offline

    Techtory

    Registriert seit:
    22. März 2016
    Beiträge:
    20
    Ort:
    Ein Örtchen in Bayern :D
    Minecraft:
    granatapfelLP
    Ich kenne mich schon damit aus, und es nich nur billiger sondern man kann auch servernetzwerke nicht nur ein server machen!!
     
    #9
  10. Techtory
    Offline

    Techtory

    Registriert seit:
    22. März 2016
    Beiträge:
    20
    Ort:
    Ein Örtchen in Bayern :D
    Minecraft:
    granatapfelLP
    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!!
     
    #10
  11. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    Das was du suchst ist "screen". Lies die man dazu dann ;-)
     
    #11
  12. Techtory
    Offline

    Techtory

    Registriert seit:
    22. März 2016
    Beiträge:
    20
    Ort:
    Ein Örtchen in Bayern :D
    Minecraft:
    granatapfelLP
    Also meins ist falsch?? Dann bitte ich dich mir zu erklären oder mir einen zu schicken den ich nutzen kann!! Meine idee war alles zusammen zu setzten!!
     
    #12
  13. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    Hier bitte ist der Link für dein Problem : Hier

    Das Kostet dich jetzt ein "Gefällt mir" ;-)
     
    #13
  14. Techtory
    Offline

    Techtory

    Registriert seit:
    22. März 2016
    Beiträge:
    20
    Ort:
    Ein Örtchen in Bayern :D
    Minecraft:
    granatapfelLP
    Bekommst eins wenn de mir einen screen erstellst für 3 server und BungeeCord wo man hal in der Konsole für alle vier landet!!!


    Wäre cool!!
    Danke schon mal!!
    Dein techtory-team!!!
     
    #14
  15. DarkPrincess
    Offline

    DarkPrincess

    Registriert seit:
    31. August 2013
    Beiträge:
    52
    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 (Text):
    1. #!/bin/bash
    2. HOST="127.0.0.1";
    3. USER="root benutzer hier";
    4. PASS="root passwort hier";
    5. DB="datenbank hier";
    6. #Ab hier brauch nichts mehr geändert werden
    7. SNAME="";
    8. SNICE="";
    9. SPFAD="";
    10. SPAR1="";
    11. SPAR2="";
    12. SMJAR="";
    13. SDAEM="";
    14. DATE=$(date +%d.%m.%y-%H:%M:%S);
    15. LOGDATEFOLD=$(date +%m.%y);
    16. SERVERSTART() {
    17.     if [[ `screen -ls |grep "$SNAME"` ]]; then
    18.         echo "found running prozess: $SNAME"
    19.         echo "Dont start the Server twice"
    20.         exit 1
    21.     else
    22.         if [ "$UID" = "0" ]; then
    23.             echo WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
    24.             for c in $(seq 1 5); do
    25.                 echo -n "!"
    26.                 sleep 1
    27.             done
    28.             echo !
    29.         fi
    30.         echo "starting the $SDESC"
    31.         if [ -d "$HOME$SPFAD" ]; then
    32.             cd "$HOME$SPFAD"
    33.             if [ ! -x $SMJAR ]; then
    34.                 echo "$SMJAR is not executable, trying to set it"
    35.                 chmod u+x $SMJAR
    36.             fi
    37.             echo "starte server im screen mode"
    38.             screen -dmS ${SNAME} ${SNICE} ${SDAEM} ${SPAR1} -jar ${SMJAR} ${SPAR2}
    39.         else
    40.             echo "No such directory: $HOME$SPFAD!"
    41.         fi
    42.     fi
    43. }
    44. CLEARLOG() {
    45.     cd "$HOME$SPFAD"
    46.     if [ ! -d "./log" ];
    47.     then
    48.         mkdir log
    49.     fi
    50.     cd log
    51.     if [ ! -d "./$LOGDATEFOLD" ];
    52.     then
    53.         mkdir "$LOGDATEFOLD"
    54.     fi
    55.     cd ..
    56.     mv ./"$SLOGNAME"."$SLOGEND" ./log/"$LOGDATEFOLD"/"$SLOGNAME"_"$DATE"."$SLOGEND"
    57.     touch "$SLOGNAME"."$SLOGEND"
    58. }
    59. screen -wipe
    60. while IFS=$'\t' read name path jar parameter1 parameter2 nice changelog logfile logend java;
    61. do
    62.     PID=`ps -ef | grep -v grep | grep ${jar} | awk '{ print $2 }'`
    63.     if [ "$PID" = "" ]; then
    64.         SNAME=${name};
    65.         SNICE=${nice};
    66.         SPFAD=${path};
    67.         SPAR1=${parameter1};
    68.         SPAR2=${parameter2};
    69.         SMJAR=${jar};
    70.         SDAEM=${java};
    71.         if [ ${changelog} -eq 1 ]; then
    72.             SLOGNAME=${logfile};
    73.             SLOGEND=${logend};
    74.             CLEARLOG
    75.         fi
    76.         SERVERSTART
    77. #        echo "Starte $SNAME neu.";
    78.     fi
    79. 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'");
    80. exit 0;
    Wir sind nicht hier die Arbeit für dich zu machen. Wir helfen aber machen es nicht für dich.
     
    #15
    MaxCode, Granatapfel, jensIO und 2 anderen gefällt das.