PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Automatisches Restarten von Gameservern nach Absturz


Seiten : [1] 2

Messi
14.09.04, 17:14
Hi an alle =) ,

hab folgende Frage .
Verfüge seid geraumer Zeit über einen Root-Server auf dem paar Gameservers laufen .
Wie das bei roots so ist kommt es gelegentlich zu Abstürzen einzelner Gameservern .
Ich wollte mich erkundigen ob es irgendeine möglichkeit gibt das die Gameservers die abschmieren automatisch gerestartet werden per script oder befehl ???

Auf dem server läuft GNU Linux Woddy 3.0 ....

Handelt sich um cs u. JKA Server =)


Danke schonmal im Voraus ,
Messi

Filzo
14.09.04, 17:19
Ich meine das Thema hatten wir schonmal... Suchfunktion 8)

Musst halt in einem Script überprüfen, ob der Server läuft, und wenn er nicht läuft einfach starten... wenn ich scripten könnte wäre das sicherlich kein Problem =)

Messi
14.09.04, 17:28
ja hab aber mal von sowas wie firedeamon gehört

zyrusthc
14.09.04, 19:13
#!/bin/sh

BASEDIR=/pfad/zum/game
COMMAND="dein startcommando"
LOGFILE=$BASEDIR/server.log
INITPIDFILE=$BASEDIR/moh.init.pid
PIDFILE=$BASEDIR/moh.pid

case "$1" in
start)
echo starting startscript and mohaa_lnxded
$0 fork &
echo $! > $INITPIDFILE
disown
;;
stop)
if test -f $INITPIDFILE ; then
if ps -p `cat $INITPIDFILE` | grep startscript 1> /dev/null 2> /dev/null ; then
echo killing startscript
kill -TERM `cat $INITPIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $INITPIDFILE` 1> /dev/null 2> /dev/null
fi
rm $INITPIDFILE
fi
if test -f $PIDFILE ; then
if ps -p `cat $PIDFILE` | grep mohaa_lnxded 1> /dev/null 2> /dev/null ; then
echo killing mohaa_lnxded
kill -TERM `cat $PIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $PIDFILE` 1> /dev/null 2> /dev/null
fi
rm $PIDFILE
fi
;;
restart)
$0 stop
$0 start
;;
check)
if test -f $INITPIDFILE ; then
if ! ps -p `cat $INITPIDFILE` | grep startscript $1> /dev/null 2> /dev/null ; then
if test -f $PIDFILE ; then
if ps -p `cat $PIDFILE` | grep ucc 1> /dev/null 2> /dev/null ; then
kill -TERM `cat $PIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $PIDFILE` 1> /dev/null 2> /dev/null
fi
rm $PIDFILE
fi
rm $INITPIDFILE
$0 start > /dev/null
fi
else
if test -f $PIDFILE ; then
if ps -p `cat $PIDFILE` | grep mohaa_lnxded 1> /dev/null 2> /dev/null ; then
kill -TERM `cat $PIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $PIDFILE` 1> /dev/null 2> /dev/null
fi
rm $PIDFILE
fi
$0 start > /dev/null
fi
;;
fork)
while [ true ] ; do
if test -f $LOGFILE ; then
mv $LOGFILE $LOGFILE.old
fi
$BASEDIR/$COMMAND -log > $LOGFILE &
echo $! > $PIDFILE
wait
done
;;
*)
echo "Usage: $0 {start|stop|restart|check}"
;;
esac

Ist noch net ganz ausgereift aber funktioniert ;)
Sobald der Prozess stirbt wird er neugestartet :)

Mit den log musste nen bischen rumprobieren.............

Messi
14.09.04, 19:45
fett danke ... muss das einfach in das verzeichniss rein wo ich starte ????
und dann die oberen zeilen bis zur servre.log verändern und das wars?
was mussn bei pfad hin?
mein game is in:
/home/jk3 einfach /home/jk3/ oder auch noch die ausführende datei?

zyrusthc
14.09.04, 21:02
Na der Pfad wo dein Gameserver liegt den musst du eintragen ! Das Script kannst du hinpacken wo du willst , es wechselt ja dann in den Gameserverpfad beim ausführen.
Du musst ausserdem zwei schreibbare Dateien erstellen in dem Gameserverroot , moh.init.pid ,moh.pid in die das Script die aktuelle PID schreibt !

Ps. noch was nen das Script "startscript" sonst musst du es auch noch umschreiben ;)

Messi
15.09.04, 15:23
hab kein befehl starte immer manuel mit

screen ./linuxjampded +set net_port port +exec server.cfg und evtl manchmal +set fs_homepath /home/jk3 damit ich das rootverzeichniss direkt da hab :P

Messi
15.09.04, 17:53
so script is nun aufm sevrer hab aber ein problem wenn ichs starten will mit sh start-script meint er:


command not found
: command not found
: command not found
: command not found
: command not found
: command not found
'tartscript: line 9: syntax error near unexpected token `
'tartscript: line 9: `case "$1" in


pls help

ps: startet er den server auch wenn ich den script starte und der server down ist .... wenn das script richtig funzt

zyrusthc
17.09.04, 00:07
BASEDIR=
COMMAND=
LOGFILE=

Richtig angeben ?
Überprüfe mal deine Eingaben....

Natürlich startet der Server gleich mit wenn du das Script startest.

Warum steht da tartscript ??????
'tartscript: line 9: syntax error near unexpected token `
'tartscript: line 9: `case "$1" in
Das Script muss "startscript" heissen , wie oben geschrieben sonst musst du es anpassen .

Hast du die moh.init.pid und moh.pid Dateien erstellt ? Wenn ja in den richtigen Verzeichnis ?

oemet
10.11.04, 13:15
so freunde der sonne und leichten unterhaltung ;)

ganz einfach ( oder auch nich )

kleine erklärung zu mir : ich benutze windows commander um die files via ftp zu übertragen. sprich ich benutze windows und übertrage die file auf einen Linuxrechner ! Blöderweisse überträgt mein windows commander via FTP aber im "binären modus".
Wenn man das nicht auf "reiner text modus" ändert wird man immer ein oder 2 einsen oder nullen zuviel haben, welche man im vi oder emacs oder where ever nicht sieht. Oder ihr schreibt das alles "handschriftlich" ohne rüberkopieren etc ... dann sollte es auch gehen.

probierts aus. hat mich "nur" 3 stunden gekostet bis ich den fehler gefunden hatte. ... meistens sinds doch nur kleinigkeiten

Jaffa
11.11.04, 08:12
oder die cfgs und anderen benötigten Dateien nicht im Windows Editor bearbeiten bzw erstellen sondern z. B. mit Proton....

dann tritt der Fehler nicht auf.

zyrusthc
11.11.04, 14:40
Oder man gibt in der konsole vom server einfach nano oder pico ein und kopiert das script ein ;) mal ganz einfach ----------- :D

Olli1209
15.11.04, 23:06
hi leute!

hier habt ihr mal mein startscript. is n "bischen" einfacher :D
Funzt aber sehr gut!

#!/bin/bash
STOPSERVER=0

# loop start (restarts on crash)
while [ $STOPSERVER -lt "1" ]; do

# start the server
./whatever -maxplayers 20 -......

# loop end
done

(CoS)Killer[L]
24.11.04, 20:59
Hallo

Gibt es auch was für Call of Duty bekomme das genausowenig hin das er alleine wieder startet.

Habe es so gemacht aber geht nicht

#!/bin/bash
STOPSERVER=0

# loop start (restarts on crash)
while [ $STOPSERVER -lt "1" ]; do

# start the server
cd /server/server1/
./cod_lnxded +set net_port 31100 +pb_sv_enable 1 +exec default_mp.cfg +map mp_carentan +set sv_maxclients "20"

Olli1209
26.11.04, 11:57
Du hast das

# loop end
done

vergessen.

(CoS)Killer[L]
26.11.04, 17:57
Hallo habe ein CoD server was trage ich den bei ein was initpidfile und pidfile

INITPIDFILE=$BASEDIR/moh.init.pid
PIDFILE=$BASEDIR/moh.pid


#!/bin/sh

BASEDIR=/root/codserver/cos/cod
COMMAND="+set net_port 33200 +exec default_mp.cfg +map_rotate +set dedicated 2 +set sv_maxclients "20""
LOGFILE=$BASEDIR/server.log
INITPIDFILE=$BASEDIR/moh.init.pid
PIDFILE=$BASEDIR/moh.pid

zyrusthc
26.11.04, 22:23
']Hallo habe ein CoD server was trage ich den bei ein was initpidfile und pidfile

INITPIDFILE=$BASEDIR/moh.init.pid
PIDFILE=$BASEDIR/moh.pid


#!/bin/sh

BASEDIR=/root/codserver/cos/cod
COMMAND="+set net_port 33200 +exec default_mp.cfg +map_rotate +set dedicated 2 +set sv_maxclients "20""
LOGFILE=$BASEDIR/server.log
INITPIDFILE=$BASEDIR/moh.init.pid
PIDFILE=$BASEDIR/moh.pid

Nah so wie du die beiden Dateien nennst !

(CoS)Killer[L]
27.11.04, 12:14
habe das mit der beiden einträgen immer noch nicht richtig raus wenn ich das script so starte dann habe ich eine endlosschleife die ich nicht mehr abgebrochen bekomme weil da ein fehler ist. diese 2 einträge verstehe ich nicht ganz
INITPIDFILE=$BASEDIR/cod332
PIDFILE=$BASEDIR/cod332

Normal starte ich den cod server so
screen -dmS cos ./cod_lnxded +set net_port 33200 +exec default_mp.cfg +map mp_carentan
screen -r cos
also was mache ich falsch.


#!/bin/sh

BASEDIR=/root/codserver/cos/main
COMMAND="./cod_lnxded +set net_port 33200 +exec default_mp.cfg +map_rotate +set dedicated 2 +set sv_maxclients "20" "
LOGFILE=$BASEDIR/server.log
INITPIDFILE=$BASEDIR/cod332
PIDFILE=$BASEDIR/cod332

case "$1" in
start)
echo starting startscript and cod_lnxded
$0 fork &
echo $! > $INITPIDFILE
disown
;;
stop)
if test -f $INITPIDFILE ; then
if ps -p `cat $INITPIDFILE` | grep startscript 1> /dev/null 2> /dev/null ; then
echo killing startscript
kill -TERM `cat $INITPIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $INITPIDFILE` 1> /dev/null 2> /dev/null
fi
rm $INITPIDFILE
fi
if test -f $PIDFILE ; then
if ps -p `cat $PIDFILE` | grep cod_lnxded 1> /dev/null 2> /dev/null ; then
echo killing cod_lnxded
kill -TERM `cat $PIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $PIDFILE` 1> /dev/null 2> /dev/null
fi
rm $PIDFILE
fi
;;
restart)
$0 stop
$0 start
;;
check)
if test -f $INITPIDFILE ; then
if ! ps -p `cat $INITPIDFILE` | grep startscript $1> /dev/null 2> /dev/null ; then
if test -f $PIDFILE ; then
if ps -p `cat $PIDFILE` | grep ucc 1> /dev/null 2> /dev/null ; then
kill -TERM `cat $PIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $PIDFILE` 1> /dev/null 2> /dev/null
fi
rm $PIDFILE
fi
rm $INITPIDFILE
$0 start > /dev/null
fi
else
if test -f $PIDFILE ; then
if ps -p `cat $PIDFILE` | grep cod_lnxded 1> /dev/null 2> /dev/null ; then
kill -TERM `cat $PIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $PIDFILE` 1> /dev/null 2> /dev/null
fi
rm $PIDFILE
fi
$0 start > /dev/null
fi
;;
fork)
while [ true ] ; do
if test -f $LOGFILE ; then
mv $LOGFILE $LOGFILE.old
fi
$BASEDIR/$COMMAND -log > $LOGFILE &
echo $! > $PIDFILE
wait
done
;;
*)
echo "Usage: $0 {start|stop|restart|check}"
;;
esac

zyrusthc
27.11.04, 13:27
Wo ist das Problem ?? In diese beiden Dateien schreibt das script den aktuellen pid von deinem COD Server ! Erstelle diese einfach und mach sie für den User der das script startet beschreibbar!

Um die Schleife zu beenden ;) einfach :
ps aux | grep fork
und dann :
kill "pid"
PID eben dann eintragen .
Damit ist die Schleife dann aufgehoben ;)

EDIT : Was mir eben noch aufgefallen ist BASEDIR=/root/codserver/cos/main !
Hast du das cod_lnxded script auch dort untergebracht ?
Die PID Dateien musst du im BASEDIR erstellen , oder das Script abändern !

(CoS)Killer[L]
27.11.04, 13:47
Hallo

Danke es Klapt vielen Dank

(CoS)Killer[L]
27.11.04, 16:39
So letzte frage noch läuft ja soweit alles super ich mach quit und er kommt alleine wieder. Nur jetzt sehe ich die screen ja nicht mehr und was mache ich wenn ich den ausscahlten will. Klar mit kill aber welche pid nehme ich sind ja 2 pid dateien. weil wenn ich die eine kill mach kommt der auch wieder lol. oder wie hält man die komplet an jetzt.
Habe es mal mit sh start.sh stop versucht geht aber nicht danke.

Gruss

zyrusthc
27.11.04, 20:34
Wie oben schon geschrieben mit "ps aux | grep fork" den pid der Schleife suchen und dann killen , und dann kannste auch deinen cod quiten ohne das er wieder kommt !

(CoS)Killer[L]
28.11.04, 09:20
Ok danke hast mir sehr geholfen.
frage noch die zeile
COMMAND="./cod_lnxded +set net_port 33200 +exec default_mp.cfg +map_rotate +set dedicated 2 +set sv_maxclients "20" "

kann ich die auch verfeinern in den ich die so schreibe das ich die screen sehe
COMMAND="screen -dmS cod ./cod_lnxded +set net_port 33200 +exec default_mp.cfg +map_rotate +set dedicated 2 +set sv_maxclients "20" "

würde dann das script auch laufen und ich sehe das mit screen -d dann die screnn wieder. Weil dann kann man ja mit screen -r cos den screen aufrufen und bin ja auf den server seine console.

Gruss

seele8
08.06.05, 13:18
und wie oder wo baut man dieses script ein ?? in die config ?

zyrusthc
08.06.05, 13:21
und wie oder wo baut man dieses script ein ?? in die config ?
Du erstellst eine Datei !
touch script.sh
dann den Inhalt reinkopieren mit hilfe eines Consoleneditors "nano , pico , vi"
und dann noch ausführbar machen.
chmod a+x script.sh
jetzt kannst du es einfach mit :
./script.sh
ausführen . ;)


mfg Oli

Evo_1980
11.06.06, 20:23
Habe nen kleines problem mit dem obrigen script. habe alle daten eingegeben
läuft auch super nur macht der mit über 100 fenster auf bzw versucht den vorgang immer und immer wieder zu starte.

Hilfe erwünscht ;-)

kalais
24.06.06, 08:30
auch mal ne kurze frage bei mir ercheint diese fehler meldung


linux:~ # sh startscript-12203
: command not foundline 2:
: command not foundline 3:
startscript-12203: line 77: unexpected EOF while looking for matching `"'
startscript-12203: line 80: syntax error: unexpected end of file



was bedeutet das ???

Suxxess
24.06.06, 22:33
Postet doch mal den Inhalt deines Startscriptes:

Die Fehlermeldung sagt das in Zeile 2 und 3 ein Fehler ist und in Zeile 77 und 80.

kalais
25.06.06, 08:58
#!/bin/sh

BASEDIR=/home/mohsh/12203
COMMAND=./spearhead_lnxded +exec server.cfg +ip xx.xx.xx -port 12203"
LOGFILE=$BASEDIR/server.log
INITPIDFILE=$BASEDIR/moh.init.pid
PIDFILE=$BASEDIR/moh.pid

case "$1" in
start)
echo starting startscript and spearhead_lnxded
$0 fork &
echo $! > $INITPIDFILE
disown
;;
stop)
if test -f $INITPIDFILE ; then
if ps -p `cat $INITPIDFILE` | grep startscript 1> /dev/null 2> /dev/null ; then
echo killing startscript
kill -TERM `cat $INITPIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $INITPIDFILE` 1> /dev/null 2> /dev/null
fi
rm $INITPIDFILE
fi
if test -f $PIDFILE ; then
if ps -p `cat $PIDFILE` | grep spearhead_lnxded 1> /dev/null 2> /dev/null ; then
echo killing mohaa_lnxded
kill -TERM `cat $PIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $PIDFILE` 1> /dev/null 2> /dev/null
fi
rm $PIDFILE
fi
;;
restart)
$0 stop
$0 start
;;
check)
if test -f $INITPIDFILE ; then
if ! ps -p `cat $INITPIDFILE` | grep startscript $1> /dev/null 2> /dev/null ; then
if test -f $PIDFILE ; then
if ps -p `cat $PIDFILE` | grep ucc 1> /dev/null 2> /dev/null ; then
kill -TERM `cat $PIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $PIDFILE` 1> /dev/null 2> /dev/null
fi
rm $PIDFILE
fi
rm $INITPIDFILE
$0 start > /dev/null
fi
else
if test -f $PIDFILE ; then
if ps -p `cat $PIDFILE` | grep spearhead_lnxded 1> /dev/null 2> /dev/null ; then
kill -TERM `cat $PIDFILE` 1> /dev/null 2> /dev/null
sleep 2
kill -9 `cat $PIDFILE` 1> /dev/null 2> /dev/null
fi
rm $PIDFILE
fi
$0 start > /dev/null
fi
;;
fork)
while [ true ] ; do
if test -f $LOGFILE ; then
mv $LOGFILE $LOGFILE.old
fi
$BASEDIR/$COMMAND -log > $LOGFILE &
echo $! > $PIDFILE
wait
done
;;
*)
echo "Usage: $0 {start|stop|restart|check}"
;;
esac

Suxxess
25.06.06, 14:03
Hinter COMMAND= fehlt schon mal ein " .
Teste es mal und schreib ob dadurch die Fehler weg sind oder ob das Script immer noch nicht funktioniert.