NoDino
Hallo,
ich möchte das mein CoD Gameserver automatisch beim Server restart gestartet wird.
Bzw. der Server über console
cod start|stop|restart gesteuert werden kann.
Auf meinem Root Server läuft Linux Fedora Cora 6.
Folgendes Script habe ich hier im Forum gefunden und versucht für CoD1 anzupassen:
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:
|
#! /bin/sh
# /etc/init.d/cod
### BEGIN INIT INFO
# Provides: CoD
# Default-Start: 2 3 5
# Default-Stop: 0 1 6
# X-UnitedLinux-Should-Start: network
# Description: Start CoD server
### END INIT INFO
# Version 2 (11/12/2005)
# Copyright (c) 2005 Soenke Gluch
# [EMAIL]gluch@informatik.uni-bonn.de[/EMAIL]
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
###
# Settings
#
# server port
SrvPort="28960"
#
# rcon password
SrvRCONPwd="xxxxxx"
#
# logfile (this is NOT the games_mp.log file from the server!)
log="/var/log/cod/cod.log"
#
# user under which the server should run
user="root"
#
# path to the server
path="/home/gameserver/cod"
#
# the server executable
codX="$path/cod_lnxded"
#
# server parameters
params="+set fs_homepath $path +set net_port $SrvPort +pb_sv_enable 1 +exec cod1.cfg"
#
# timeout after that the server will be killed (in seconds)
timeout=20
#
###
./etc/rc.status
SrvIP="localhost"
case "$1" in
start)
echo -n "Starting CoD server"
checkproc $codX && echo -n "(already running)" || su -c "cd $path && $codX $params 2> $log >&2" $user &
rc_status -v
;;
stop)
echo -n "Shutting down CoD server"
checkproc $codX || echo -n "(not running)" && echo "ÿÿÿÿrcon $SrvRCONPwd quit" | netcat -u -w1 $SrvIP $SrvPort 2> /dev/null >&2
for ((i=0; i <= timeout ; i++)); do
checkproc $codX || break && sleep 1
done
checkproc $codX && killproc $codX || echo -n
rc_status -v
;;
restart)
$0 stop
$0 start
rc_status
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
|
|
(
Das Script wird z.Zt. als root ausgeführt ... das kann ich wenns läuft ja noch ändern.)
Das Script habe ich unter:
/etc/rc.d/init.d als
cod abgespeichert.
Die Links habe ich wie folgt angelegt:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
|
ln -s /etc/init.d/cod /usr/local/bin/cod |
|
Wenn ich nun versuche den CoD Server mit
cod start zu starten bekomme ich folgende Fehlermeldung:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
|
/usr/local/bin/cod: line 59: /etc/rc.status: Datei oder Verzeichnis nicht gefunden |
|
Desweiteren wird CoD beim Root-Server Reboot nicht automatisch gestarten.
Kann mich vielleicht jemand an die Hand nehmen, mir welche an den Hinterkopf hauen, und mir auf die Sprünge helfen?
Was mache ich Falsch?
Gruß NoDino
PS: Falls das hier im Forum schonmal geklärt wurde bitte nicht gleich schlagen ... Ich würde mich über weiterführende Links freuen.
Kelli
Original von NoDino
Auf meinem Root Server läuft Linux Fedora Cora 6.
###
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
|
./etc/rc.status
SrvIP="localhost"
|
|
Wenn ich nun versuche den CoD Server mit
cod start zu starten bekomme ich folgende Fehlermeldung:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
|
/usr/local/bin/cod: line 59: /etc/rc.status: Datei oder Verzeichnis nicht gefunden |
|
Ich hab schon 4 Jahre kein RedHat^^^W Fedora mehr von innen gesehen, aber was mir auf den ersten Blick auffällt ist der Punkt bei
./etc/rc.status
Copy n Paste Fehler? Das sollte vermutlich /etc/rc.status heißen.
Ansonsten denke ich heute abend zu Hause mal darüber nach wie das bei Fedora gleich noch mal war...
NoDino
Hallo, danke für deine schnelle Antwort.
Jetzt habe ich mit:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
|
ln -s /etc/init.d/cod /etc/rc3.d/S98cod |
|
noch einen Link in rc3.d geschrieben.
Nachdem ich jetzt im Script
./etc/rc.status
in
/etc/rc.status
geändert habe,
startet der Gameserver beim reboot automatisch.
In den Prozessen (
ps -aux) steht folgendes:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
|
root 3150 0.0 0.0 4456 468 pts/0 S 16:44 0:00 /bin/sh /usr/local/bin/cod start
root 3154 0.0 0.0 9012 1892 pts/0 S 16:44 0:00 su -c cd /home/gameserver/cod && /home/gameserver/cod/cod_lnxded +set fs_homepath /home/gameserver/cod +set net_port 28960 +pb_sv_enable 1 +exec cod1.cfg 2> /var/log/cod/cod.log >&2 root
root 3155 0.0 0.0 4452 988 pts/0 S 16:44 0:00 bash -c cd /home/gameserver/cod && /home/gameserver/cod/cod_lnxded +set fs_homepath /home/gameserver/cod +set net_port 28960 +pb_sv_enable 1 +exec cod1.cfg 2> /var/log/cod/cod.log >&2
root 3156 1.9 1.3 152124 42216 pts/0 S 16:44 0:04 /home/gameserver/cod/cod_lnxded +set fs_homepath /home/gameserver/cod +set net_port 28960 +pb_sv_enable 1 +exec cod1.cfg
|
|
Ist das erstmal so richtig?
Wenn ich den Gameserver mit
cod stop anhalten will bekomme ich folgende Fehlermeldung:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
|
/etc/rc.d/init.d$ cod stop
/usr/local/bin/cod: line 59: /etc/rc.status: No such file or directory
/usr/local/bin/cod: line 69: checkproc: command not found
/usr/local/bin/cod: line 71: checkproc: command not found
/usr/local/bin/cod: line 73: checkproc: command not found
/usr/local/bin/cod: line 74: rc_status: command not found
Shutting down CoD server(not running) |
|
und der Gameserver läuft immer noch.
Wenn ich den Gameserver mit
cod restart restarten will, verhält es sich ähnlich:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
|
/etc/rc.d/init.d$ cod restart
/usr/local/bin/cod: line 59: /etc/rc.status: No such file or directory
/usr/local/bin/cod: line 59: /etc/rc.status: No such file or directory
/usr/local/bin/cod: line 69: checkproc: command not found
/usr/local/bin/cod: line 71: checkproc: command not found
/usr/local/bin/cod: line 73: checkproc: command not found
/usr/local/bin/cod: line 74: rc_status: command not found
/usr/local/bin/cod: line 59: /etc/rc.status: No such file or directory
/usr/local/bin/cod: line 64: checkproc: command not found
/usr/local/bin/cod: line 65: rc_status: command not found
/usr/local/bin/cod: line 79: rc_status: command not found
Shutting down CoD server(not running)Starting CoD server |
|
Okay, ich werde auch selbst nochmal versuchen etwas rauszufinden, warte aber sehr gern bis heute Abend wenn du dich nochmal melden würdest.
Danke schonmal.
Gruß
NoDino
NoDino
Ich danke dir Trotzdem.
So ich hab mir jetzt mal ein Script zurechtgefummelt.
Ist nix tolles, sieht auch nich toll aus ... funktioniert aber erstmal kurzfristig.
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:
|
#! /bin/sh
# OPTIONS: (start|stop|restart|status) #
# User Name
G_USER=cod
# Screen Name
NAME=cod
DESC="Call of Duty 1 Server"
PARAMS="+set dedicated 2 +pb_sv_enable 1 +exec cod1.cfg"
DIR=/home/gameserver/cod
SCRIPT=cod_lnxded
DAEMON=$DIR/$SCRIPT
case "$1" in
start)
if [[ `su $G_USER -c "screen -ls | grep $NAME"` ]]
then
echo "$DESC läuft bereits !!!"
else
echo "Starte den $DESC "
su $G_USER -c "cd $DIR; screen -d -m -S $NAME $DAEMON $PARAMS"
fi
;;
stop)
if [[ `su $G_USER -c "screen -ls | grep $NAME"` ]]
then
echo -n "Stoppe $DESC "
kill `ps aux | grep -i screen | grep -i $NAME | awk '{print $2}'`
echo " ... done."
else
echo "Kein laufenden $DESC gefunden!"
fi
;;
restart)
if [[ `su $G_USER -c "screen -ls | grep $NAME"` ]]
then
echo -n "Stoppe $DESC "
kill `ps aux | grep -i screen | grep -i $NAME | awk '{print $2}'`
echo " ... done."
else
echo "Kein laufenden $DESC gefunden!"
fi
echo -n "Starte $DESC"
su $G_USER -c "cd $DIR; screen -d -m -S $NAME $DAEMON $PARAMS"
echo " ... done."
;;
status)
ps aux | grep -v grep | grep cod > /dev/null
CHECK=$?
[ $CHECK -eq 0 ] && echo "$DESC ist ONLINE" || echo "$DESC ist OFFLINE"
;;
*)
echo "Benutze: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0 |
|
In einer ruhigen Minute werde ich mal ein vernünftiges schreiben.
Damit läuft jetzt erstmal unser
COD1 NostalgieServer.
Ihr seit bei uns jederzeit Herzlich Willkommen.
=[FDGU]= Freunde Der Guten Unterhaltung
Bis später
NoDino
NoDino
Hallo Leute,
leider habe ich schon wieder oder immernoch ein Problem mit dem "Autostart"
Hier nochmal das Script welches ich verwende:
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:
|
#! /bin/sh
# OPTIONS: (start|stop|restart|status) #
# User Name
G_USER=cod
# Screen Name
NAME=cod
DESC="Call of Duty 1 Server"
PARAMS="+set dedicated 2 +pb_sv_enable 1 +exec cod1.cfg"
DIR=/home/gameserver/cod
SCRIPT=cod_lnxded
DAEMON=$DIR/$SCRIPT
case "$1" in
start)
if [[ `su $G_USER -c "screen -ls | grep $NAME"` ]]
then
echo "$DESC läuft bereits !!!"
else
echo "Starte den $DESC "
su $G_USER -c "cd $DIR; screen -d -m -S $NAME $DAEMON $PARAMS"
fi
;;
stop)
if [[ `su $G_USER -c "screen -ls | grep $NAME"` ]]
then
echo -n "Stoppe $DESC "
kill `ps aux | grep -i screen | grep -i $NAME | awk '{print $2}'`
echo " ... done."
else
echo "Kein laufenden $DESC gefunden!"
fi
;;
restart)
if [[ `su $G_USER -c "screen -ls | grep $NAME"` ]]
then
echo -n "Stoppe $DESC "
kill `ps aux | grep -i screen | grep -i $NAME | awk '{print $2}'`
echo " ... done."
else
echo "Kein laufenden $DESC gefunden!"
fi
echo -n "Starte $DESC"
su $G_USER -c "cd $DIR; screen -d -m -S $NAME $DAEMON $PARAMS"
echo " ... done."
;;
status)
ps aux | grep -v grep | grep cod > /dev/null
CHECK=$?
[ $CHECK -eq 0 ] && echo "$DESC ist ONLINE" || echo "$DESC ist OFFLINE"
;;
*)
echo "Benutze: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0 |
|
Das Script soll unter dem Benutzer cod gestartet werden.
Wenn ich den ganzen Root-Server reboote und anschließend mit
cod status
den Status vom cod Server abfrage kommt
Call of Duty 1 Server ist ONLINE
mit ps -aux ist aber kein Prozess zu finden
nach cod restart finde ich den prozess auch und der Server läuft.
wo ist mein problem?
NoDino
Hiho,
ich hoffe ich Mülle euer Forum zu diesem Thema da letzte mal voll?
Das ist jetzt mein FUNKTIONIERENDES autostart|start|stop|restart & status script.
Läuft auf unserem Fedora Core 6 Root-Server unter dem cod User:
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:
|
#!/bin/bash
#
# source function library
. /etc/rc.d/init.d/functions
lockfile=/var/lock/subsys/cod
DIR=/home/gameserver/cod
SCRIPT=cod_lnxded
DAEMON=$DIR/$SCRIPT
# User Name
G_USER=cod
# Screen Name
NAME=cod
PARAMS="+exec cod1.cfg"
COD_OPTS="+pb_sv_enable 1 +exec cod1.cfg"
RETVAL=0
start() {
echo -n $"CoD1 GameServer wird GESTARTET: "
if [ -f $lockfile ] ; then
echo "!!!---> CoD1 GameServer ist bereits [AKTIV] <---!!!"
RETVAL=0
else
touch "$lockfile" && success || failure
su $G_USER -c "cd $DIR; screen -d -m -S $NAME $DAEMON $PARAMS" &
RETVAL=$?
echo
fi
}
stop() {
echo $"Stoppe CoD1 GameServer: "
if [ -f $lockfile ] ; then
kill `ps aux | grep -i screen | grep -i $NAME | awk '{print $2}'`
rm -f "$lockfile" && success || failure
echo "CoD1 GameServer ANGEHALTEN."
RETVAL=0
else
echo "Kein laufenden CoD1 GameServer gefunden!"
fi
RETVAL=$?
echo
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|force-reload)
restart
;;
reload)
;;
condrestart)
[ -f "$lockfile" ] && restart
;;
status)
if [ -f $lockfile ]; then
echo $"CoD1 GameServer [AKTIV]"
RETVAL=0
else
echo $"CoD1 GameServer [INAKTIV]"
RETVAL=3
fi
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
exit 1
esac
exit $RETVAL |
|
Jetzt kann ich mich an den CoD4 Server wagen ... .. . OhGott
Kelli
Original von NoDino
Das ist jetzt mein FUNKTIONIERENDES autostart|start|stop|restart & status script.
Super das du es hinbekommen hast.
Original von NoDino
Jetzt kann ich mich an den CoD4 Server wagen ... .. . OhGott
Eigentlich brauchst du nur Script, Params und Name anpassen, dann sollte es sofort gehen.
Du musst aber aufpassen wegen dem Name, das hier ist so nicht ideal:
# User Name
G_USER=cod
# Screen Name
NAME=cod
In dieser Zeile
kill `ps aux | grep -i screen | grep -i $NAME | awk '{print $2}'`
passiert nämlich folgendes:
- Suche nach Prozessen die unter screen laufen
- In diesen screen Prozessen alle killen in denen die Zeichenfolge "cod" vorkommt.
Wenn dein Benutzer "cod" heißt kann es passieren das dies auf alle Screen Fenster zu trifft (Wenn der Name des Benutzers statt der id zurückgegeben wird.) Deswegen mach den Namen eindeutig, srvcod-28960 , srvcod4-28961 oder ähnlich.
Hast du das mit dem Reboot getestet? Wenn der root rebootet ohne das der Server vorher angehalten wurde, kann es sein das die Datei
lockfile=/var/lock/subsys/cod
nach dem restart noch existiert. Denn die wird nur gelöscht wenn wenn du den Server ordentlich über stop anhälst. Ich bin mir aber nicht sicher, kann sein das Fedora beim start von selbst alles löscht was unter /var/lock/ liegt. Dann sollte es funktionieren wie gewollt.
NoDino
Okay, das mit dem User- und Screennamen werde ich nochmal überarbeiten.
Original von Kellerkind
Hast du das mit dem Reboot getestet? Wenn der root rebootet ohne das der Server vorher angehalten wurde, kann es sein das die Datei
lockfile=/var/lock/subsys/cod
nach dem restart noch existiert. Denn die wird nur gelöscht wenn wenn du den Server ordentlich über stop anhälst. Ich bin mir aber nicht sicher, kann sein das Fedora beim start von selbst alles löscht was unter /var/lock/ liegt. Dann sollte es funktionieren wie gewollt.
Ja das habe ich getestet.
Fedora löscht das lockfile. Nach einem root reboot startet der CoD Server Ordnungsgemäß / auch wenn er vorher lief bzw. nicht gestopt wurde.
PS: Das Startscript für CoD4 macht mir jetzt eher weniger sorgen.
Mit Gruselt`s vor dem RIESEN upload der Daten ... .. .