Server über Rcon neu starten

|FoD| k!lla
'n Abend zusammen!

Ist es möglich mit Hilfe von rcon den Gameserver neu zu starten?

Hoffe auf Antwort.

MfG
Kelli
Ganz klares Jaein.

Neustarten geht nicht. Aber bei mir z.B. läuft der Gameserver über ein Fork Childprozess. Stirbt das Kind wird ein neuer Prozess gestartet. Damit ist effektiv ein
\rcon quit
dassellbe wie ein Neustart. Ohne ein solches (Re)StartScript bleibt der Server aber einfach nur stehen.
|FoD| k!lla
Danke, werde mich mal bei meinem Serveradmin informieren.

mfg
|FoD| k!lla
Hallo,

könntest du mir das mit dem Fork Childprozess mal erläutern? Was google so ausspuckt versteh ich nicht ganz.

mfg
Kelli
Das Problem ist ja das es kein eingebauten restart Automatismus gibt. Wird CoD beendet muss man es von Hand neu starten. Das lässt sich aber im Betriebssystem erledigen, z.B. wenn du dieses Startscript verwendest:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
#!/bin/sh
# Benutzer Kram
PORT="28000"
##### Das Startscript sollte im Namen den Port haben, also start28000, start28960 etc..
HOMEDIR="/home/kk/.cod4-28000"
BASEDIR="/home/kk/games/cod4"
MOD="ios"
CONFIG="cod4clanserver.cfg"

# Log und Pid
LOGFILE=$HOMEDIR/server.log
INITPIDFILE=$HOMEDIR/init.pid
PIDFILE=$HOMEDIR/cod.pid

# Ab hier wirds spannend
COMMAND="cod4_lnxded +set fs_basepath $BASEDIR/ +set fs_homepath $HOMEDIR/ +set fs_game mods/$MOD +set dedicated 2 +set net_port $PORT +exec $CONFIG +map_rotate"

case "$1" in
start)
if test -f $INITPIDFILE ; then
echo "Startscript lauft schon";
elif test -f $PIDFILE ; then
echo "Server laeuft schon";
echo "Nix zu tun, Probier mal die Option check";
echo "Sollte er ganz sicher nicht laufen von Hand die init.pid und cod.pid aus $HOMEDIR/pid loeschen.";
else
echo Starte Server Port $PORT
$0 fork > $HOMEDIR/output$PORT.log 2>$HOMEDIR/output$PORT.log &
echo $! > $INITPIDFILE
disown
fi
;;
stop)
if test -f $INITPIDFILE ; then
if ps -p `cat $INITPIDFILE` | grep start$PORT 1> /dev/null 2> /dev/null ; then
echo killing start$PORT
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
else
echo Finde das Startscript nicht.
fi
if test -f $PIDFILE ; then
if ps -p `cat $PIDFILE` | grep cod4_lnxded 1> /dev/null 2> /dev/null ; then
echo killing cod2_lnxded
echo nun ist Schluss mit Zocken
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
else
echo Hab den Server nicht gefunden
echo Nix zu tun
fi
;;
restart)
$0 stop
$0 start
;;
check)
## Entfernt die PID wenn der Server nicht leuft, ist aber unsicher bei mehreren Servern.
if test -f $INITPIDFILE ; then
if ! ps -p `cat $INITPIDFILE` | grep start$PORT $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 cod4_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
$BASEDIR/$COMMAND &
echo $! > $PIDFILE
wait
echo "sollte jetzt laufen."
done
;;
*)
echo "Usage: $0 {start|stop|restart|check}"
;;       
esac                                    


werden zwei Prozesse gestartet. Einmal der Vater - und der startet ein Kindprozess.
Dieser 2. (Child)Prozess ist dann der COD Server und der 1. Prozess checkt unentwegt ob der 2. noch läuft:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
fork)
while [ true ] ; do
$BASEDIR/$COMMAND &


Gibst du über die Console dann \rcon quit ein wird der CoD Prozess zwar beendet, aber sofort ein neuer gestartet. Was effektiv einem neustart gleich kommt. Das hat auch noch den Vorteil das dieselben Selbstheilungskräfte auch einsetzen wenn der COD aus irgendwelchen Gründen abstürzt.

Man kann das auch noch anders lösen, viele Wege führen nach Rom - aber das ist ein relativ komfortabler und einfacher.