Original von yoda
Denke mal, so was grundsätzlich mal mit einer Erklärung zu posten dürfte für einige interessant sein... Wär klasse, wenn Dir das nix ausmacht...
Mir? Nööö. Was immer ich verbreche darf von jeden überall verwendet werden. Ich wundere mich immer das es Leute gibt die sowas auch noch haben wollen

Ich muss aber dazu sagen das das Grundgerüst (Das Prinzip mit der PID und sich selber aufrufen über FORK) nicht von mir ist, ich weiß nichtmehr ob das ein Artikel über Bashprogrammierung war oder ein anderer Post in irgendeinen Forum, keine Ahnung. Ich hab es nur für meine Bedürfnisse etwas angepasst.
Code 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:
104:
|
#!/bin/sh
# Benutzer Kram
PORT="28000"
##### Das Startscript sollte im Namen den Port haben, also start28000, start28960 etc..
HOMEDIR="/home/ios/.cod2-28000"
BASEDIR="/home/ios/games/cod2"
MOD="ios"
CONFIG="cod2clanserver.cfg"
# Log und Pid
LOGFILE=$HOMEDIR/server.log
INITPIDFILE=$HOMEDIR/init.pid
PIDFILE=$HOMEDIR/cod.pid
# Ab hier wirds spannend
COMMAND="cod2_lnxded +set fs_basepath $BASEDIR/ +set fs_homepath $HOMEDIR/ +set
fs_game $MOD +set dedicated 1 +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 cod2_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 cod2_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}"
;;
|
|
Geändert werden muss nur:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
# Benutzer Kram
PORT="28000"
##### Das Startscript sollte im Namen den Port haben, also start28000, start28960 etc..
HOMEDIR="/home/KK/.cod2-28000"
BASEDIR="/home/KK/games/cod2"
MOD="ios"
CONFIG="cod2clanserver.cfg"
|
|
Ohne Mod einfach
Code angehängt. Klicke hier zum Ein-/Ausblenden
BASEDIR ist das Verzeichnis von COD2, HOMEDIR ist nur wichtig bei mehreren Servern, ansonsten kann man dasselbe eintragen wie bei BASEDIR
Wie oben schon drinsteht sollte das Script unter dem Namen start
port gespeichert werden. Einmal ruft es sich selber mit diesen Namen auf, das müsste man ansonsten an diversen Stellen anpassen, auf der anderen Seite vereinfacht das die Fehlersuche erheblich, da dann ein ps -ef |grep
port alle Prozesse anzeigt die dazugehören. Also wenn der Server auf port 28960 laufen soll, trage den Port 28960 oben bei # Benutzer Kram ein
und bennene das Script
start28960
Ich benutze es so für 4 verschiedene Server.
Es macht die Dinge wie oben beschrieben, die Ausgabe der Console liegt dann im COD (home) Verzeichniss unter output-port.log
Noch ein Hinweis, früher hatte ich hier:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
|
COMMAND="cod2_lnxded +set fs_basepath $BASEDIR/ +set fs_homepath $HOMEDIR/ +set
fs_game $MOD +set dedicated 1 +set net_port $PORT +exec $CONFIG +map_rotate
|
|
noch +set sv_punkbuster 1 drinstehen, das hab ich mittlerweile entfernt da es ja auch ohne geht wenn es in der cfg richtig eingetragen ist.

Wer möchte ändert es also noch in
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
|
COMMAND="cod2_lnxded +set fs_basepath $BASEDIR/ +set fs_homepath $HOMEDIR/ +set
fs_game $MOD +set dedicated 1 +set net_port $PORT +set sv_punkbuster 1 +exec $CONFIG +map_rotate
|
|
Original von yoda
Geht doch in diese Richtung, oder? (Hab nur begrenzte Linux-Kenntnisse...)
https://www.opferlamm-clan.de/?menu=234
Ist eigentlich ähnlich, dieses hier Verzichtet auf screen, und ich hab bei dem anderen mal ebend schnell drübergeschaut, da wir der Server nicht wieder neugestartet wenn man \quit eingibt. Glaub ich rausgelesen zu haben? (Das macht hier das "fork" der ständig neu aufgerufen wird (while [true] ...) )
Es gibt genau dann ärger wenn mal beide Scripte gekillt werden, (z.B. bei Shutdown des Servers) dann ist die Datei init.pid noch da und das Script wird behaupten das alles super ist, aber nichts geht. Da braucht man dann etwas Ahnung damit man dem auf die Schliche kommt. (die .pid Dateien löschen, eventuell vorhandene Zombies killen etc..) Ist mir aber bis jetzt nur dann passiert wenn der root neu gestartet wurde und ich vergessen habe die Server vorher anzuhalten. Also wer mit
https://www.opferlamm-clan.de/?menu=234 glücklich ist hat absolut keinen Grund das zu ändern. Wer auf screen verzichten möchte dem ist es vielleicht noch nützlich.
Wenn wer weiß von wem die Original Idee mit dem PID und fork) ist: melden. Ich will das auf keinen Fall als auf meinen Mist gewachsen verstanden wissen.