]Bravo[ Mykill
Hi,
hab mal wieder 2 Fragen:
1. Wie genau erstelle ich mir ein Startscript, um nicht immer im Screen alles per Hand eingeben zu müssen? Schön wäre auch, wenn ich mehrere Startscripte mit verschiedenen Parametern per Webmin starten könnte.
2. Ich habe einen neuen User für den CoD4-Server angelegt und ihm auch alle nötigen Rechte im CoD4-Ordner gegeben. Wenn ich jetzt den Server unter diesem User starten will, bekomme ich ne Fehlermeldung, dass in "/root/.callofduty4" nicht geschrieben werden kann...oder so ähnlich.
Was muss ich tun, damit ich den Server nicht unter Root starten muss?
]Bravo[ Mykill
Danke yoda. Das mit dem "Nicht-Als-Root-Starten" hab ich hinbekommen.
Hab allerdings nichts gefunden, was mir in Bezug auf die start.sh oder einen Webmin-Befehl weiterhilft.
Kann mir das mal jemand Schritt für Schritt erklären, wie ich eine start.sh erstelle?
Ich nutze folgende Befehle, wenn ich einen Server starte:
screen -mS cod4
./cod4_lnxded +set fs_homepath /home/cod4/.callofduty4 +set fs_basepath /home/cod4/ +set loc_language 2 +set dedicated 2 +exec public_ranked.cfg +map_rotate
Strg + A + D
Strg + A + D
Damit läuft der Server einwandfrei, auch als Nicht-Root.
Kann ich diese Folge einfach in eine Datei schreiben und die dann ausführen? Oder müssen da noch andere Befehle rein?
Kelli
Dann brauchste auch kein screen mehr.
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:
105:
|
#!/bin/sh
# Benutzer Kram
PORT="28960"
##### Das Startscript sollte im Namen den Port haben, also start28000, start28960 etc..
HOMEDIR="/home/ios/.cod4-28960"
BASEDIR="/home/ios/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 $MOD +set dedicated 2 +set net_port $PORT +set sv_punkbuster 1 +set loc_language 2 +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 cod4_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
|
|
- Speichern unter start(PORT) also zb. start28960
- chmod u+x ./start28960
- Die Pfade oben anpassen
zum starten:
start28960 start
zum stoppen:
start28960 stop
Logfile der Console zur Fehlersuche liegt in Homedir des Servers unter output-PORT.log
Have a nice day.
VincentRaven
Hi,
ich versuche mich auch grad in linux, root, gameserver ein zu arbeiten. Bin noch recht Newbie und auch großes Interesse daran, mehrere Forks bzw. Instanzen von Cod4 zu starten.
Im Grunde klappt das auch schon. Ich hab mir mehrere Start-Dateien gebastelt und mehrere server-cfgs. Und damit starte ich derzeit 3 Server.
Allerding: Wenn ich einen Restarte, gehen alle anderen mit down, weil in den Scripts irgendwo ein killall drin steht. Ich denke, ich habe da irgendetwas noch nicht verstanden.
Dann bin ich auf dieses Startscript gestossen und erhoffe mir damit eine Lösung, dass nicht immer alle Server gekillt werden und habe eine neue Datei angelegt und es hinein kopiert.
Jetzt bekomme ich beim starten aber immer den Fehlercode
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
|
104:Syntax error: end of file unexpected (expecting ") ")
|
|
Hat jemand eine Idee?
Alternativ würde es mir schon helfen, wenn mir jemand sagen kann, wie ich einen Server bzw. Prozess gezielt killen kann.
lg Vince
Linux: ubuntu
Puma
Nichts leichteres als das, PID raussuchen und per killbefehl beenden.
Bsp.
kill 1234
Kelli
Original von VincentRaven
Jetzt bekomme ich beim starten aber immer den Fehlercode
104:Syntax error: end of file unexpected (expecting ") ")
Du hast beim copypasta einen Fehler gemacht - da fehlt eine Klammer.
Siehe auch hier
https://www.opferlamm-clan.de/start-scri...ame-server.html
Startscript mit Childprozess - du musst nur jedem einen eindeutigen Namen geben -
##### Das Startscript sollte im Namen den Port haben, also start28000, start28960 etc..
VincentRaven
Vielen Dank für Eure Antworten.
1. Der Kill-Befehl ist natürlich super und wird von mir schön angewendet.
Jetzt soll aber das Script zum Einsatz kommen, da alle Server den Ordner .callofduty4 anlegen und ich die eigentlich schön von einander trennen möchte.
2. Der Copy-Paste-Fehler ist streng genommen kein Fehler, bzw. der oben gepostete Code scheint nicht vollständig zu sein. Ich glaube, es fehlt auch keine Klammer sondern das hier nach ";;":
esac
exit 0
zumindest lässt sich das Script dann aufrufen und ausführen. Jetzt bekomme ich allerdings folgende Fehlermeldung:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
|
./start28960: 103: cannot create /var/www/gameserver/cod4/.cod4-28960/output28960.log: Directrory nonexistent
./start28960: 103: cannot create /var/www/gameserver/cod4/.cod4-28960/init.pid: Directrory nonexistent
./start28960: 103 disown: not found |
|
Soweit so gut. Verstanden habe ich, dass der gameserver-user nicht die Rechte hat, das Verzeichnis anzulegen oder das Verzeichnis vielleicht vorher per Hand angelegt werden muss?
Weiss jemand, was ich tun müsste soll?
lg Vince
Kelli
mkdir /var/www/gameserver/cod4/.cod4-28960/
Lass aber den Punkt bei HOMEDIR und im Verzeichnis weg, mit führenden Punkt ist es ein verstecktes Verzeichnis.
$HOMEDIR="/var/www/gameserver/cod4/cod4-28960/"
mkdir /var/www/gameserver/cod4/cod4-28960/
chown gameserveruser /var/www/gameserver/cod4/cod4-28960/
VincentRaven
1. Also gut, ich hab das so gemacht und den Server gestartet. Zumindest sagt er mir das:
gebe ich "./start28960 start" ein, kommt die Fehlermeldung:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
|
Starte Server Port 28960
./start28960: 103: disown: not found |
|
Derer Server down, bzw. Timeout im HLSW-Tool.
Und bei "ps ux" bekomme ich:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
|
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
gamer 15734 0.0 0.0 7716 2020 ttyp0 S 21:53 0:00 su gamer
gamer 15735 0.0 0.0 4468 1816 ttyp0 S 21:53 0:00 bash
gamer 15764 0.0 0.0 1760 528 ttyp0 S 21:53 0:00 /bin/sh ./start28960 fork
gamer 17851 0.0 0.9 334380 19376 ttyp0 R 21:54 0:00 ./cod4_lnxded-bin +exec nade.cfg +set fs_basepath /var/www/gameserver/cod4/ +set fs_homepath /var/www/gameserver/.cod4-28960/ +set fs_game pro
gamer 17857 0.0 0.0 2644 1012 ttyp0 R+ 21:54 0:00 ps ux |
|
Jemand eine Ahnung, was ich da machen kann? Irgendwie scheint es mir so, als ob der user gamer nicht auf "disown" zugreifen kann.
In meinem Übereifer habe ich jetzt als root eingegeben: "usermod -s/bin/bash gamer"
Jetzt kann ich mich per "su gamer" nicht mehr als Gamer anmelden und sonst auch nicht. Und mir wird jedes mal gesagt: "Cannot execute /bin/disown: No such file or directory". Ich glaub jetzt hab ich ziemlich Mist gebaut....
Mir ist jetzt auch noch aufgefallen das in meinem root-Verzeichnis Dateien von cod4 liegen???
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:
|
-rwxr-xr-x 1 gamer gamer 1273 2008-07-01 11:16 cod4_lnxded
-rwxr-xr-x 1 gamer gamer 2278332 2008-07-01 11:16 cod4_lnxded-bin
drwxr-xr-x 5 root root 4096 2011-05-06 02:14 dev
drwxr-xr-x 88 root root 4096 2011-05-15 22:17 etc
-rw-r--r-- 1 root root 0 2011-05-06 02:14 fastboot
drwxr-xr-x 4 root root 4096 2011-05-15 22:15 home
drwxr-xr-x 14 root root 12288 2011-05-05 20:43 lib
-rwxr-xr-x 1 gamer gamer 41384 2007-11-18 07:12 libgcc_s.so.1
-rwxr-xr-x 1 gamer gamer 939472 2007-11-18 07:12 libstdc++.so.6
drwxr-xr-x 2 gamer gamer 4096 2011-05-06 00:24 main
drwxr-xr-x 2 root root 4096 2011-05-05 20:40 media
drwxr-xr-x 2 root root 4096 2011-05-05 20:42 mnt
drwxr-xr-x 3 root root 4096 2011-05-05 20:47 opt
-rwxr-xr-x 1 gamer gamer 2539230 2007-10-24 10:18 pbsetup.run
drwxr-xr-x 2 root root 4096 2007-10-05 13:00 private-backup
dr-xr-xr-x 65 root root 0 2011-05-06 02:14 proc
-rw-r--r-- 1 gamer gamer 6514 2008-06-28 20:02 README.linux
drwx------ 6 root root 4096 2011-05-06 17:48 root
drwxr-xr-x 2 root root 5864 2011-05-05 20:42 sbin
drwxr-xr-x 2 root root 4096 2011-05-05 20:42 selinux
drwxr-xr-x 2 root root 4096 2011-05-05 20:40 srv
drwxr-xr-x 3 root root 0 2011-05-06 02:14 sys
drwxrwxrwt 6 root root 4096 2011-05-15 22:17 tmp
drwxr-xr-x 10 root root 4096 2011-05-05 20:44 usr
drwxr-xr-x 16 root root 4096 2011-05-05 20:47 var
drwxr-xr-x 3 gamer gamer 4096 2007-12-20 05:55 zone |
|
Jetzt bin ich durcheinander??? Die müssen da doch weg, oder?
Kelli
cat /etc/passwd |grep gamer
VincentRaven
Hallo Kellerkind.
Ich hab das einfach mal so als root eingegeben:
root@:/home/cod4# cat /etc/passwd |grep gamer
gamer:x:2523:2523::/var/www/gameserver/:/bin/disown
root@:/home/cod4# su gamer
Cannot execute /bin/disown: No such file or directory
root@:/home/cod4#
Ich kann immer noch nicht als gamer einloggen?!
VincentRaven
Ok. Jetzt kann ich einloggen, nachdem ich folgendes eingegeben habe:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
|
root@:/# usermod -s /bin/bash gamer |
|
Nachdem ich das disown im Startscript auskommentiert habe, läuft er auch einwandfrei.
Danke hier nochmal an alle!