Archiv verlassen und diese Seite im Standarddesign anzeigen : Automatisches Restarten von Gameservern nach Absturz
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
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 =)
ja hab aber mal von sowas wie firedeamon gehört
#!/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.............
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?
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 ;)
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
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
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 ?
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
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.
Oder man gibt in der konsole vom server einfach nano oder pico ein und kopiert das script ein ;) mal ganz einfach ----------- :D
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"
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
']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
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
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
und wie oder wo baut man dieses script ein ?? in die config ?
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
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 ;-)
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 ???
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.
#!/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
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.
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.