Prozess automatisch bei absturtzt neustarten

TSPB | Striker

New Member
Hallo,

ich betreibe einen V-Server und möchte gerne, dass ein bestimmter Prozess geprüft wird, ob dieser ausgeführt wird. Sollte dies nicht der Fall, soll er sofort gestartet werden.
Leider werde ich bei Google nicht wirklich fündig zu meinem Problem. Der Server läuft auf Debian 4.0.

Ich würde mich freuen, wenn mir jemand eine etwas genauere Anleitung schildern könnte, um mein Problem schnellstmöglich zu beseitigen.

Vielen Dank im voraus
Striker
 
Hallo,

wie Ben schon geschrieben hat ist das mit Monit (Monit) möglich.
Auch wenn das Programm eine Menge kann, ist es trotzdem mit sehr wenigen Resourcen zu frieden. Die Installation ist unter Debian über aptitude bzw. apt möglich. Die Konfiguration ist einfach. Du musst dir dann nur noch die Konfiguration für deinen Fall schreiben und das ist leichter als man denkt...im Notfall einfach noch mal wegen der Konfiguration nachfragen.


Hier noch mal ein Link zu einem Tutorial unter Debian: https://www.adminlife.net/admins-helferlein/howto-monit-unter-debian-etch/
 
apt-get install monit

Du weisst aber wie man Software installiert, oder? Ist der Absturz des Prozesses evtl. ein Konfigurationsfehler, sodass monit eher eine unschöne Lösung ist?
 
Es ist eher gesagt ein Battlefield 2 Mod Server. (Sandbox)
Die Version ist sehr neu und noch verbuggt.
Und nach einem bestimmten Zeitpunkt stürtzt der Prozess ab.
Es ist auf allen Server wo ich schon drauf war.
Egal ob Linux oder Windows.
 
Last edited by a moderator:
Shell-Skript mit

(Beispiel für Battlefield Vietnam und Battlefield 1942)

Code:
#!/bin/sh

if !(ps ax | grep -v grep | grep -q bfv_linded); then
 echo 'Programm bfv_linded not running'
 cd /root/bfv
 nohup ./start.sh > /dev/null 2>&1 &
 echo 'Programm bfv_linded started'
fi

if !(ps ax | grep -v grep | grep -q bf1942_lnxded); then
 echo 'Programm bf1942_lnxded not running'
 cd /root/bf1942
 nohup ./start.sh >/dev/null 2>&1 &
 echo 'Programm bf1942_lnxded started'
fi

und das Shellskript dann in die Crontab eintragen. Am besten nicht jede Minute, da Gameserver manchmal mehr als 1 Minute brauchen, um zu starten.
 
Vielen Dank mr_brain!

Das hört sich schonmal gut und einfach an.

Aber ich bin totaler Anfänger in sachen crontab und Shell-Skript.

Welche Datei muss ich editieren?
 
Ich hab mal bisschen ausprobiert:
Das habe ich in die Crontab datei im Verzeichnic /etc geschrieben:
*/5 * * * * sandbox cd /home/sandbox/ sh auto_restart.sh

Und so sieht die auto_restart.sh Datei aus:
#!/bin/sh

if !(ps ax | grep -v grep | grep -q bf2); then
echo 'Programm bf2 not running'
cd /home/sandbox/bf2
screen -d -m -S bf2 ./start.sh +modPath mods/sandbox
echo 'Programm bf2 started'
fi

Ich guck mal ob der Server beim nächsten absturtzt neustartet.
 
Last edited by a moderator:
Das Script geht, habe es mal aufgerufen wo der Server offline war. (nochmals vielen Dank)

Aber der Crontab will nicht.
Ich habe halt noch nicht eine Crontab gemacht...

Was habe ich falsch gemacht?
 
So, wie Du es derzeit eingetragen hast, wird alle fünf Minuten der Befehl "cd" mit den Argumenten "/home/sandbox/ sh auto_restart.sh" ausgeführt, was nicht funktionieren kann, da "cd" nur ein Argument nimmt.
Da das Arbeitsverzeichnis im Script sowieso gesetzt wird, kannst Du den "cd"-Teil auch weglassen.

Zweites Problem, warum es danach nicht funktionieren wird, ist, dass restart.sh einen illegalen Buchstaben enthält, nämlich den Punkt. Entweder musst Du das Script umbenennen oder einen Cronjob mit dem Befehl "crontab sandbox" anlegen, bei dem es die Namenseinschränkungen nicht gibt. Vorher solltest Du Dir vielleicht die Man-Pages durchlesen:
Code:
man cron
man crontab
man 5 crontab
 
Ich verstehe das nicht....
1. in dem Crontab muss doch cd sein. Damit er in den Ordner wechselt wo die sh Datei liegt, die er starten soll.

2. Wie meinst du das mit umbennen? (das scheint mir der einfachste weg zu sein:D
 
zu 1: Du rufst auto_restart.sh mit absolutem Pfad auf, dann brauchst du auch kein cd

zu 2: Bennen auto_restart.sh einfach auto_restart.
 
Warum willst du unbedingt im Cronjob das Verzeichnis wechseln? Das ist doch Käse.

*/5 * * * * sandbox /home/sandbox/auto_restart
Das reicht doch vollkommen. Du willst doch nur "auto_restart" ausführen, oder nicht? Denk dran die Rechte entsprechend zu setzen, dass "sandbox" das Skript auch ausführen darf.
 
Übrigens, bei dem Befehl fehlt "sh". Also jemand der den Crontab Befehl braucht:

Code:
*/5 * * * * sandbox sh /home/sandbox/auto_restart

Ich habe aber das Script jede Minute am laufen, weil der Server ziemlich schnell wieder oben ist.
 
Back
Top