Linux-Server: Starten per "Verknüpfung" / Nicht als Root starten

]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?
yoda
Schau mal hier rein:
Linuxserver starten
]Bravo[ Mykill
Danke yoda. Das mit dem "Nicht-Als-Root-Starten" hab ich hinbekommen. Grins 1

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 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:
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 einblendenCode 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

Zitat:

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 einblendenCode 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 einblendenCode 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 einblendenCode 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.... Heul!!!


Mir ist jetzt auch noch aufgefallen das in meinem root-Verzeichnis Dateien von cod4 liegen???

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:
-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 einblendenCode 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!