Shell Script funzt nicht

Meester Proper

New Member
Hallo Community,
ich möchte folgendes Script benutzen um zu überprüfen ob ein Programm mit dem Namen samp022svr noch läuft, gegebenfalls soll es eine neue Instanz starten, was es auch tut, aber leider immer egal ob das Programm läuft oder nicht. Hier das Script:

Code:
#!/bin/sh
 
PROCESS_COUNT=$(ps -fu root | grep samp022svr | grep -v grep | wc -l)
case $PROCESS_COUNT in
0) cd /pfad/zu/GTA-Server 
./samp022svr &
;;
1) #OK, program is already running once
;;
*) #OK, program is already multiple times
;;
esac
 
Scripten ist nicht so mein Gebiet, deswegen konnte ich nicht viel über das Programm pgrep herausfinden, da die Google Suchergebnis teils schwer verständlich sind, ich hoffe es kann mir trotzdem einer helfen
 
pgrep ist Teil des Pakets 'procps' und damit mit größter Wahrscheinlichkeit auf Deinem Server installiert. Die Man-page (man pgrep) ist nun wirklich nicht zu kompliziert und verrät Dir, was die verschiedenen Exit-Codes bedeuten. Folglich kannst Du mit einem kleinen Einzeiler das Programm einfach neu starten wenn es nicht läuft:
Code:
pgrep samp022svr || cd /pfad/zu/GTA-Server && ./samp022svr &
 
Diese Zeile allein + #!/bin/sh bewirkte bloß wieder, das eine neue Instanz des Programmes geöffnet wurde. Vielleicht kann einer so nett sein und eine berichtigtie (also nochmal für doofe wie mich :D) posten?

MfG
Meester Proper
 
Mein Script sieht jetzt folgendermaßen aus:

Code:
#!/bin/sh
 
pgrep samp022svr || cd /pfad/zu/GTA-Server && ./samp022svr &

Das Problem ist, dass es bloß das Program nochmal öffnet.

Wenn kein PID zu samp022svr gefunden wurde, dann starte Programm
Könnte es sein, dass das irgendwie mit meinem Linux VPS von HE zusammenhängt?
 
Nein, die zweite Zahl ist der Exit-Code, der korrekt '0' ist.
Wenn das der Fall ist, dürfte aber alles nach dem doppelten pipe-Symbole '||' nicht ausgeführt werden. Wie Du schreibst, wird bei Dir das Programm trotzdem gestartet... Das kann nicht sein!

PS: pgrep beendet das laufende Programm nicht, sondern prüft nur, ob es läuft.
 
Also ich hab dein Script von oben nochmals ausprobiert, ausgegeben wird:
Code:
 3959
 Started Server on port: 7777, with maxplayers: 200 lanmode is OFF.
also wurde der Server obwohl er läuft nochmals gestartet

wenn ich dann das script nochmals startet wird folgendes ausgegeben:

Code:
3959
1723
 Started Server on port: 7777, with maxplayers: 200 lanmode is OFF.
 
Code:
#!/bin/sh

pgrep samp022svr
if [ $? = "1" ]; then
	cd /GTA-Server && exec samp022svr &
	echo "Server restarted"
else
	echo "Server is up and running"
fi
 
Vielen vielen Dank an Dich Bibabu jetzt funktioniert es endlich richtig :D

Ich hab dann auch gleich noch ein weitere Fragen, undzwar hab ich ein Perl Script was per Cron mit /perl script.pl ausgeführt wird, jedesmal wenn es ausgeführt wird, gibt es aus ob es erfolgreich war oder nicht, das möchte ich verhindern, da jedesmal wenn es per Cron ausgeführt eine e-mail mit der Ausgabe an mich gesendet wird. Ist es möglich dies zu unterdrückem um so nicht unnötige E-Mails zu bekommen`?

Das selbe gilt natürlich auch für Dein Script bibau, dort möchte ich auch die Ausgabe unterdrücken, um nicht unnötige Mails zu erhalten.

MfG
Meester Proper
 
Last edited by a moderator:
mein Script sieht jetzt folgendermaßen aus:
Code:
#!/bin/sh

pgrep samp022svr >/dev/null
if [ $? = "1" ]; then
	cd /pfad/zu/GTA-Server && exec samp022svr &
	echo #Server restarted
else
	echo #Server is up and running
fi

leider gibt es immernoch eine leere Zeile aus.
 
Dann solltest du die Kommentarzeichen bei den echo Kommandos entfernen oder wenn du gar keine Ausgabe willst die Zeilen komplett löschen.
 
Back
Top