PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Automatischer Restart



Teadorus
15.09.15, 19:57
Hallo,

Ich bin dabei ein Script zu schreiben was in Crontab alle 5 Minuten schaut ob der Server gestartet ist oder nicht.

Da ich ein Automatisches Update Script laufen habe darf das Restart script denn Server nicht starten wenn er gerade am updaten ist (Server ist beim Updaten aus)


Ich bin noch sehr am anfang von Linux scripten, daher lacht nicht über die Vereinfachung meines Scriptes.

Restart.sh




SERVERDIR=/home/steam/mike
file=incomming.txt
SERVERSTARTCOMMAND=$SERVERDIR"/start"

cd $SERVERDIR

if [ -e $file ]
then
Do nothing

else
$SERVERSTARTCOMMAND

fi




Nun ist folgendes Problem.

Wenn ich das nun So in denn Crontab einbinde killt er denn laufenden Prozess alle 5 Minuten (Script soll alle 5 Min ausgeführt werden)
Das soll er selbstverständlich nicht tuen.

Nun war meine Überlegung über denn Prozess zu schauen ob er läuft oder nicht.
Wenn er läuft soll er nichts machen. Und wenn er nicht läuft soll er es ausführen.

Da aber bei jedem start der Prozess eine andere ID bekommt ist dies etwas schwerer. Nun meine Überlegung an Hand des namens.
Nur das ist nicht alles. Er soll natürlich vorher schauen ob der Server am Updaten ist (er darf denn Server nicht beim Update vorgang starten)

Daher meine Frage, wie mache ich die Beiden abfragen ?


Gruß

marce
15.09.15, 20:25
naja, die PID bekommst du z.B. über pidof, testen, ob der Prozess läuft kannst Du eben über die PID, die Ausgabe von ps greppen, ... - Möglichkeiten gibt's viele.

Herausfinden, ob der Server sich gerade updated - naja, kommt drauf an, ob diese Info irgendwie abrufbar ist von außen...

Teadorus
15.09.15, 20:36
Danke für die Antwort

Jedoch war das nicht meine Frage.

Wie ich denn Prozess rausfinde weiß ich.


Damit finde ich denn richtigen Prozess.

if [ "$(pidof ./ShooterGameServer)" ]
then
echo "process was found"
else
echo "process not found"
fi


Nun meine Frage.

Wie binde ich 2 abfragen in die IF ein ?

Er soll erst nach dem laufen des Prozess suchen, dann ob die incomming.txt da ist und wenn beides nicht vorhanden ist soll er die Startcommand ausführen.

fork
15.09.15, 21:31
Ich bin dabei ein Script zu schreiben was in Crontab alle 5 Minuten schaut ob der Server gestartet ist oder nicht.

Vorab: Nein, ich beantworte nicht Deine Frage, sondern zeige Dir eine Lösung auf, die das, was Du möchtest(Einen dauerhaft lauftenden GameShooterServer, ausser bei Updates) besser umsetzt.

Meine Empfehlung ist, dass der Serverdienst grundsätzlich immer läuft. Bei einem Update wird er heruntergefahren und anschliessend wieder gestartet. Wenn er abstürzt, wird er automatisch neu gestartet.

Wie man erkennt, ob bei Dir ein Update läuft, kann ich Dir auch nicht sagen.

Damit ich Dir helfen kann die Frage: Welches Betriebssystem hast Du am laufen?

Teadorus
15.09.15, 21:49
Linux Debian 8 64bit (Jessie)

Ich bin schon kurz vorm Finish
Jedenfalls denke ich das mal






SERVERDIR=/home/steam/mike
file=incomming.txt
SERVERSTARTCOMMAND=$SERVERDIR"/start"

cd $SERVERDIR
# Wenn Datei existiert & der Prozess läuft
if [ -e $file ] && [ "$(pidof ./ShooterGameServer)" ]
then
echo "Soll nicht starten"

else
echo "Server soll starten"

fi



Problem hierbei ist gerade das der auch ins else geht wenn nur 1 Sache davon nicht zutrifft.


EDIT:

Habs selbst hinbekommen einfach anstelle der && setzt man || dann müssen beide Parameter stimmen

fork
15.09.15, 22:00
Du willst nicht das...


if [ -e $file ] && [ "$(pidof ./ShooterGameServer)" ]

...sondern das:


if [ -e $file -o -n "$(pidof ./ShooterGameServer)" ]

Teadorus
15.09.15, 22:12
Habs nun so gemacht wie ich das wollte.

vielleicht war meine fragen Stellung auch etwas doof formuliert.

Hier mein Script wie ich das haben wollte.







SERVERDIR=/home/steam/mike
file=incomming.txt
SERVERSTARTCOMMAND=$SERVERDIR"/start"

cd $SERVERDIR

if [ "$(pidof ./ShooterGameServer)" ];
then
echo "Soll nichts machen weil Prozess läuft"
exit
else
if [ -e $file ];
then

echo "Updatet gerade ich mache also nichts"

else
echo "Server starten"

fi
fi