Feigling Geschrieben 30. Januar 2007 Geschrieben 30. Januar 2007 Hiho, Hoffe ich hab das Thema in den richtigen Bereich gepostet. Es geht um folgendes. Ich hab im Netz nen Script für das Starten eines CSS Servers unter Linux gefunden und hab diesen auf meine Verhältnisse noch angepasst und er funktioniert auch fast tadellos. Ich kann den Server starten und ich kann mir auch den Status anzeigen lassen und ich kann ihn auch beenden und da liegt das eigentliche Problem. Wenn ich sage blabla.sh stop dann wird der Server zwar gestoppt so das man nicht mehr drauf verbinden kann, aber wenn ich dann mit "ps -ax" mir die Prozesse anzeigen lasse ist der Prozess immer noch aktiv was dann auch die Statusanzeige mit blabla.sh status verfälscht, weil er dann sagt der Server sei noch online. Hier ist mal der Script. Ich hoffe ihr könnt mir helfen #!/bin/sh # # Start the Counter-Strike dedicated server. # # Edit and uncomment it to run the server as non-root CS_USER="css" PATH=/bin:/usr/bin:/sbin:/usr/sbin # # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS! DIR=/home/css/css_server DAEMON=$DIR/srcds_run # LAN-server: #PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust" # Internet-server: PARAMS="./srcds_run -game cstrike +ip 134.155.50.35 -port 27015 +map de_dust2 +maxplayers 12" NAME=cstrike DESC="Counter Strike Source Dedicated Server" case "$1" in start) echo "Starting $DESC: $NAME" if [ -e $DIR ]; then cd $DIR # Change the lines for running as non-root! su $CS_USER - -c "screen -d -m -S $NAME $DAEMON $PARAMS" screen -d -m -S $NAME $DAEMON $PARAMS else echo "No such directory: $DIR!" fi ;; stop) if [[ `screen -ls |grep $NAME` ]] then echo -n "Stopping $DESC: $NAME" kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'` echo " ... done." else echo "Coulnd't find a running $DESC" fi ;; restart) if [[ `screen -ls |grep $NAME` ]] then echo -n "Stopping $DESC: $NAME" kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'` echo " ... done." else echo "Coulnd't find a running $DESC" fi echo -n "Starting $DESC: $NAME" cd $DIR screen -d -m -S $NAME $DAEMON $PARAMS echo " ... done." ;; status) # Check whether there's a "hlds" process # if "checkproc" is installed, you can use this: # checkproc $DIR/hlds_i686 && echo "CS-Server RUNNING" || echo "CS-Server NOT RUNNING" # (thx to commander) ps aux | grep -v grep | grep srcds_r > /dev/null CHECK=$? [ $CHECK -eq 0 ] && echo "CSS Server is UP" || echo "CSS Server is DOWN" ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 1 ;; esac exit 0 Mfg Feigling Zitieren
Schlaubi Geschrieben 30. Januar 2007 Geschrieben 30. Januar 2007 Hallo, hast Du mal das original Skript da - bitte posten, mit einem Diff könnte man Deine wesentliche Anpassungen herausfinden und die Fehlersuche wäre leichter... (keine Zeit das ganze Skript jetzt durchzusehen)... Zitieren
Feigling Geschrieben 30. Januar 2007 Autor Geschrieben 30. Januar 2007 #!/bin/sh # # Start the Counter-Strike dedicated server. # clear # Edit and uncomment it to run the server as non-root # CS_USER="hluser" PATH=/bin:/usr/bin:/sbin:/usr/sbin # # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS! DIR=/home/hlserver1 DAEMON=$DIR/hlds_run # LAN-server: #PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust" # Internet-server: PARAMS="-binary ./hlds_i686 -game czero +ip xx.x.xx.xx.x -port 27015 +map de_dust2_cz +maxplayers 32" NAME=cstrike DESC="CounterStrike czero dedicated server" case "$1" in start) echo "Starting $DESC: $NAME" if [ -e $DIR ]; then cd $DIR # Change the lines for running as non-root! # su $CS_USER - -c "screen -d -m -S $NAME $DAEMON $PARAMS" screen -d -m -S $NAME $DAEMON $PARAMS else echo "No such directory: $DIR!" fi ;; stop) if [[ `screen -ls |grep $NAME` ]] then echo -n "Stopping $DESC: $NAME" kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'` echo " ... done." else echo "Coulnd't find a running $DESC" fi ;; restart) if [[ `screen -ls |grep $NAME` ]] then echo -n "Stopping $DESC: $NAME" kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'` echo " ... done." else echo "Coulnd't find a running $DESC" fi echo -n "Starting $DESC: $NAME" cd $DIR screen -d -m -S $NAME $DAEMON $PARAMS echo " ... done." ;; status) # Check whether there's a "hlds" process # if "checkproc" is installed, you can use this: # checkproc $DIR/hlds_i686 && echo "CS-Server RUNNING" || echo "CS-Server NOT RUNNING" # (thx to commander) ps aux | grep -v grep | grep hlds_r > /dev/null CHECK=$? [ $CHECK -eq 0 ] && echo "HLDS is UP" || echo "HLDS is DOWN" ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 1 ;; esac exit 0 Das hier ist der Originalscript. Zitieren
Schlaubi Geschrieben 30. Januar 2007 Geschrieben 30. Januar 2007 // Edit: sorry...ich poste später mal...hab grad was bemerkt...so kanns nicht gehen...hab leider im Moment keine Zeit....bis später.. Zitieren
Schlaubi Geschrieben 30. Januar 2007 Geschrieben 30. Januar 2007 Hi, jetzt - sorry grad im Moment wars bissi brenzlig. Wenn ich Dich/das Skript richtig verstehe, willst Du es als root-User laufen lassen - richtig? Überprüf mal bitte diese Parameterübergabe: # Internet-server: PARAMS="-binary ./hlds_i686 -game czero +ip xx.x.xx.xx.x -port 27015 +map de_dust2_cz +maxplayers 32" So sieht der im original Skript aus: # Internet-server: PARAMS="./srcds_run -game cstrike +ip 134.155.50.35 -port 27015 +map de_dust2 +maxplayers 12" Und als letzten wesentlichen Punkt (und für mein Gefühl hast Du auch hier dein Problem) prüfe mal bitte wenn der Server gestartet ist, ob folgende Kommandozeile eine Ausgabe liefert: ps aux | grep -v grep | grep hlds_r ...dann sehen wir weiter (evtl. musst Du Deinen grep-Ausdruck anpassen) bzw. das Exit-Code Auslese-Verhalten ändern Zitieren
Feigling Geschrieben 30. Januar 2007 Autor Geschrieben 30. Januar 2007 Also ich muss dich enttäuschen aber ich will den Script als User css laufen lassen, der auch angelegt ist Du hast übrigens die Scripts vertauscht Original # Internet-server: PARAMS="-binary ./hlds_i686 -game czero +ip xx.x.xx.xx.x -port 27015 +map de_dust2_cz +maxplayers 32" Mein Variante # Internet-server: PARAMS="./srcds_run -game cstrike +ip 134.155.50.35 -port 27015 +map de_dust2 +maxplayers 12" Die Eingabe von ps aux | grep -v grep | grep hlds_r ergibt keine Ausgabe. Zitieren
Schlaubi Geschrieben 30. Januar 2007 Geschrieben 30. Januar 2007 Ups sorry, in der Eile ^^ Na gut, dann ändere doch bitte mal folgende Zeile: # Internet-server: PARAMS="./srcds_run -game cstrike +ip 134.155.50.35 -port 27015 +map de_dust2 +maxplayers 12" in folgende ab: # Internet-server: PARAMS="-game cstrike +ip 134.155.50.35 -port 27015 +map de_dust2 +maxplayers 12" Stoppe (zur Sicherheit) und Starte den Server (also den Dienst erneut) und wenn es dann noch nicht funktioniert, poste bitte nochmal die Ausgabe von (wenn der Server gestartet ist und läuft): ps aux | grep -v grep | grep srcds_r Bzw. kannst Du ja mal selbst gucken und nachvollziehen, ob ein Prozess namens srcds_r läuft - woher nimmst Du denn eigentlich die Info, dass der Process srcds_r heißt nachdem Du greppen musst? Zitieren
Feigling Geschrieben 30. Januar 2007 Autor Geschrieben 30. Januar 2007 woher nimmst Du denn eigentlich die Info, dass der Process srcds_r heißt nachdem Du greppen musst? Zitieren
Schlaubi Geschrieben 30. Januar 2007 Geschrieben 30. Januar 2007 Weil der Server mit einer Datei gestartet wird die srcds_run heißt Das heißt IMHO erstmal garnichts 2 Möglichkeiten: 1. Willst Du den Dienst stoppen, startest Du den kompletten Server durch 2. Du verschaffst mir eine Login-Shell zum nachvollziehen auf Deinem Server Natürlich ist das nur ein Witz :D Mhm...bissi schwierig...also Du hast definitiv das Problem, dass das Matching auf den Prozess nicht klappt und somit der kill auch nicht funktioniert. Wir sollten die Sache mal ganz anderes angehen, erstmal losgelöst vom Skript. Ich kenne Deine Umgebung einfach zu wenig und vom CSS Server hab ich noch weniger Ahnung. Aaaalso: Starte doch bitte mal den Prozess "per Hand" (hier posten, wie Du das machst), wenn er dann läuft (indem Du Dich einloggen kannst oder was auch immer), dann machst Du einen (Aufruf + Ausgabe bitte posten) ps -ef | grep -v grep | grep <Dein Suchausdruck>; echo $? Hier sollte Dein Exit Code 0 lauten. Dann das Ganze anders herum. Stoppe den Dienst "per Hand" (hier posten, Du das machst), wenn er dann gestoppt ist (also Deiner Meinung nach *ggg), dann machst Du wiederrum einen (Aufruf + Ausgabe bitte posten) ps -ef | grep -v grep | grep <Dein Suchausdruck>; echo $? Hier sollte richtigerweise keine Ausgabe erfolgen und Dein Exit Code 1 lauten. Erst wenn das gewährleistet ist, dann können wir das Skript angehen Zitieren
Feigling Geschrieben 30. Januar 2007 Autor Geschrieben 30. Januar 2007 War schon am Passwort einrichten :D Also den Server starte ich mit ./srcds_run -game cstrike +ip 134.155.50.35 -port 27015 +map de_dust2 +maxplayers 12 damit hab ich gesucht ps -ef | grep -v grep | grep srcds_run Ergebnis: root 4813 4795 0 16:44 pts/0 00:00:00 /bin/sh ./srcds_run -game cstrike +ip 134.155.50.35 -port 27015 +map de_dust2 +maxplayers 12 Stoppen kann man den Prozess nur mit dem kill befehl und dann kommt folgendes Ergebnis bei ps -ef | grep -v grep | grep <Dein Suchausdruck>; echo $? 1 Aber bevor ich jetzt weiter erzähle. Mir ist gerade was aufgefallen. Wenn ich den Script als root starte mit dem Befehl oben springt der Server an. Wenn ich das ganze als css user mache bringt der server mir nen fehler. liegt es vielleciht an den berechtigungen ? der script hat die berechtigung -rwxr-xr-x und ist besitzer sowie eigentümer. Mfg Feigling Zitieren
Feigling Geschrieben 31. Januar 2007 Autor Geschrieben 31. Januar 2007 Also das Problem hat sich gelöst Der letzte gepostete Stand von dem Script funktioniert. War warscheinlich nur ein Berechtigungsproblem von den Usern. Danke für deine Hilfe Schlaubi Mfg Feigling Zitieren
Schlaubi Geschrieben 31. Januar 2007 Geschrieben 31. Januar 2007 Immer wieder gerne...sorry, dass ich nicht mehr dazu kam zu antworten. Aber scheinbar lösen sich einige Probleme nach gewisser eh Zeit von selbst *g Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.