boot start-Script 2 gamesserver starten ?

Status
Not open for further replies.

uF2k

Registered User
Hallo,

Ich hoffe es kann mir jemand helfen, und zwar habe ich einen Debian Root Server auf dem ich einen Public server habe und einen Warserver.
Diese beiden server sollen nach einen reboot automatisch gestartet werden.

Derzeit verwende ich eine datei namens server1 in der folgendes drin steht.
Code:
#!/bin/sh
#
# Start the Counter-Strike dedicated server.
#

clear

# Edit and uncomment it to run the server as non-root
# CS_USER="hluser"

PATH=/bin:/usr/bin:/sbin:/usr/sbin

# # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS!
DIR=/home/hlserver1

DAEMON=$DIR/hlds_run

# LAN-server:
#PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust"
# Internet-server:
PARAMS="-binary ./hlds_i686 -game czero +ip xx.x.xx.xx.x -port 27015 +map de_dust2_cz +maxplayers 32"

NAME=cstrike
DESC="CounterStrike czero dedicated server"

case "$1" in
 start)
   echo "Starting $DESC: $NAME"
   if [ -e $DIR ];
   then
    cd $DIR
#  Change the lines for running as non-root!
#  su $CS_USER - -c "screen -d -m -S $NAME $DAEMON $PARAMS"
    screen -d -m -S $NAME $DAEMON $PARAMS
   else echo "No such directory: $DIR!"
   fi
   ;;

 stop)
   if [[ `screen -ls |grep $NAME` ]]
   then
       echo -n "Stopping $DESC: $NAME"
       kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... done."
   else
       echo "Coulnd't find a running $DESC"
   fi
   ;;

 restart)
   if [[ `screen -ls |grep $NAME` ]]
   then
       echo -n "Stopping $DESC: $NAME"
       kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... done."
   else
       echo "Coulnd't find a running $DESC"
   fi
   
   echo -n "Starting $DESC: $NAME"
   cd $DIR
   screen -d -m -S $NAME $DAEMON $PARAMS
   echo " ... done."
   ;;
 
 status)
   # Check whether there's a "hlds" process
   # if "checkproc" is installed, you can use this:
   # checkproc $DIR/hlds_i686 && echo "CS-Server RUNNING" || echo "CS-Server NOT RUNNING"
   # (thx to commander)
   ps aux | grep -v grep | grep hlds_r > /dev/null
   CHECK=$?
   [ $CHECK -eq 0 ] && echo "HLDS is UP" || echo "HLDS is DOWN"
   ;; 
 
 *)
   echo "Usage: $0 {start|stop|status|restart}"
   exit 1
   ;;
esac

exit 0

Das klapt soweit auch ganz gut für den Server1 nur wie mache ich das mit Server 2 ???? Ich möchte das so haben das ich server 1 und server 2 einzeln stoppen und starten kann.

mir wurde auch schon reichen wenn ich 2 ausfürbare dateien hätte so das ich Prozess 1 oder Prozess 2 starten / stoppen kann nur wie gesagt diese beiden müssen unabhänig voneinander sein und auch bei server neustart automatisch neu gestartet werden

Hoffe es kann mir jemand da weiterhelfen.
 
Last edited by a moderator:
Ja das ist im Prinzip ganz änderst du kopierst die Datei "server1" zu "server2" und machst diese ausführbar mit chmod +x server2.

Dann änderst du noch die Pfade in server2 zu deinem zweiten Server und FERTIG.

Dann kannst du Server1 so starten:
/etc/init.d/server1 start
und Server2 so:
/etc/init.d/server2 start

und beide werden bei einem Reboot automatisch gestartet.
 
@vorposter: --> # CS_USER="hluser"

nebnbei, ich benutze das Script auch, nur gibt es halt da ein Problem...
Pfade anpassn ist ja kein Problem nur das killn der Server mit server1 stop funktioniert nicht, da dadurch alle beide Server gestoppt würden... Ich machs einfach mit top und kill -9 !


edit: hab jetz mal eben das Script angeschaut und ne Idee wie du das oben beschriebene Problem lösen kannst:
du musst NAME=cstrike anpassn, also zum beispiel als warserver und als public, dadurch kannste das dann auch getrennt voneinander starten und beenden

mfg
 
üüchh said:
@vorposter: --> # CS_USER="hluser"
Eben, das deutet genau darauf hin, dass zwar ein Ändern des Prozessbesitzers vorgesehen ist, aber nicht aktivert, sondern mit # auskommentiert wurde.
 
...

Ich bin dann mal so lieb und poste mal mein angepasstes Startscript!

#!/bin/sh
# Use it manualy like:
# /etc/rc.d/init.d/hlds start
# /etc/rc.d/init.d/hlds restart
# /etc/rc.d/init.d/hlds stop
clear
# Edit and uncomment it to run the server as non-root
CS_USER="deinuser"

PATH=/bin:/usr/bin:/sbin:/usr/sbin

# # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS!
DIR=/home/deinuser/css-1

DAEMON=$DIR/srcds_run

# LAN-server:
#PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust"
# Internet-server:
PARAMS="-game cstrike +map de_dust +maxplayers 14 -port 27015 &"

NAME=cstrike
DESC="CS:S dedicated server"

case "$1" in
start)
echo "Starting $DESC: $NAME"
if [ -e $DIR ];
then
cd $DIR
# Use this lines for running as non-root!

su --shell=/bin/bash $CS_USER --command="$DAEMON $PARAMS"

else echo "No such directory: $DIR!"
fi
;;

stop)
if [[ `screen -ls |grep $NAME` ]]
then
echo -n "Stopping $DESC: $NAME"
kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
echo " ... done."
else
echo "Coulnd't find a running $DESC"
fi
;;

restart)
if [[ `screen -ls |grep $NAME` ]]
then
echo -n "Stopping $DESC: $NAME"
kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
echo " ... done."
else
echo "Coulnd't find a running $DESC"
fi

echo -n "Starting $DESC: $NAME"
cd $DIR
screen -d -m -S $NAME $DAEMON $PARAMS
echo " ... done."
;;

status)
# Check whether there's a "hlds" process
# if "checkproc" is installed, you can use this:
# checkproc $DIR/hlds_run && echo "CS-Server RUNNING" || echo "CS-Server NOT RUNNING"
# (thx to commander)
ps aux | grep -v grep | grep srcds_run > /dev/null
CHECK=$?
[ $CHECK -eq 0 ] && echo "SRCDS is UP" || echo "SRCDS is DOWN"
;;

*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac

exit 0


Der Start funktioniert prächtig, einfach als root ausführen. Der Server wird dann als non-root user welcher natürlich angepasst sein muß auch dann gestartet wenn der user selbst keine shell hat...

Was nicht funktioniert ist der restart und stop, wäre schön wenn das mal einer fixen könnte...

So kann man sich dann ergänzen... :-)
 
Natürlich laufen diese nicht als root :D

Das mit dem Kopieren es Scripts habe ich auch, genau wie üüchh beschrieben hatte, da hatte ich genau das gleiche Problem wie er das bein beenden des Prozesses alle server herruntergefaren wurden.
 
Last edited by a moderator:
[...]da hatte ich genau das gleiche Problem wie er das bein beenden des Prozesses alle server herruntergefaren wurden.
Die Gameserver mit unterschiedlichen Benutzern starten(also bei einem Skript $CS_USER ändern) und die "kill" Zeile bei stop und restart zu sowas ändern:
Code:
su --shell=/bin/bash $CS_USER --command="kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`"
Ist etwas unsauber aber sollte funktionieren. Eine richtig saubere Lösung bekommt man nur per PID Datei hin...
 
...

Da wäre mir ne Lösung mit konkreter pid end lieber :-)

Bzw. so gehts nicht.

Na wer hats dahingehend drauf?
 
Die Lösung des Problems von Stoppen und Restarten des Servers wenn das Script öfter genutzt wird habe ich bereits gepostet...Habs vorhin selber aufn Server getestet und es funktioniert :p

üüchh said:
edit: hab jetz mal eben das Script angeschaut und ne Idee wie du das oben beschriebene Problem lösen kannst:
du musst NAME=cstrike anpassn, also zum beispiel als warserver und als public, dadurch kannste das dann auch getrennt voneinander starten und beenden
 
Status
Not open for further replies.
Back
Top