Problem mit HLTV Script

H

Hoelsch

Jungspund
Also folgendes:
Ich hab ein hlds Startscript. Das ist alles schön und gut. So. Das hab ich nun umgeschrieben für HLTV. Dachte ich auf jeden Fall. Aber wenn ich das dann per ./cs5 start (so heißt die Datei) ausführe, kommt, dass er den startet, aber wenn ich dann per screen reingehen will, sagt er mir, dass kein screen vorhanden ist. Und der HLTV Server wird auch nicht gestartet (logischerweise).
Hier mal das Script:
Code:
#!/bin/sh
#
# Start the Counter-Strike dedicated server.
#
# AUTHORS :
#
# Julien Escario ( pandemik@azilog.net )
# &
# Cedric Rochat ( crochat@younics.org )
#
# ===========================================
#
# What you need:
#
# Linux :)
# awk
# screen
# the hlds_l & cstrike-files
# 
# How to use:
# 
# Edit the DIR-Var to fit your system (just contains the path to the dir that contains hlds_run)
# Edit the PARAMS-Var to fit your needs 
# - standard is startup as LAN-server
#
# When this is done, copy the file to /etc/rc.d/init.d (or whereever your system stores the
# scripts for starting the services
# Now you can link the script to your runlevel-dir, here's an example for runlevel 3:
# ln -s /etc/rc.d/init.d/hlds /etc/rc.d/rc3.d/S90hlds
# ln -s /etc/rc.d/init.d/hlds /etc/rc.d/rc3.d/K50hlds
#
# Or use it manualy like: 
# /etc/rc.d/init.d/hlds start 
# /etc/rc.d/init.d/hlds stop 
#
# How to see the server-console:
#
# Just type in: screen -r cstrike 
# More info about screen can be found by typing "man screen" or using this nice link
# http://server.counter-strike.net/help/linuxscreen.html
#
# If you don't want to start the server as root you have to change this:
# add the var CS_USER and uncomment it
# change the lines at the "start-block"
# 
# You must be logged in as this user to re-attach the screen!
#
# DOC by jwm (jwm@counter-strike.de)

clear

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

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

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

DAEMON=$DIR/hltv


# LAN-server:
#PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust"
# Internet-server:
PARAMS="+connect 85.XX.XXX.XXX:27010 -port 27025 +exec hltv.cfg"

NAME=hltv
DESC="[nCSo] HLTV"

case "$1" in
 start)
    echo "Starting $DESC: $NAME"
       if [ -e $DIR ];
          then
	      cd $DIR export LD_LIBRARY_PATH=$DIR
	      #  Change the lines for running as non-root!
	      #  su $CS_USER - -c "screen -d -m -S $NAME $DAEMON $PARAMS"
	          screen -A -m -d -S $NAME export LD_LIBRARY_PATH=$DIR $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 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
Ich verstehe das nicht. Denn wenn ich den Befehl (./hltv +connect 85.XX.XXX.XXX:27010 -port 27025 +exec hltv.cfg) ohne screen ausführe funktioniert alles wunderbar. Was mache ich da falsch?

Viele Dank schon mal!

MfG Hoelsch:hilfe2: :hilfe2:
 
Was bekommst du denn, wenn du die Variablen im Script für den screen-Befehl austauscht und diesen mal einzeln ausführst?
 
inwiefern austauschen? gegen welche sollte ich die denn tauschen? also so mit den params bekomme ich, wenn ich das so ausführe:
screen -A -m -d -S /home/server/server1/hltv +connect 85.XX.XXX.XXX:27010 -port 27025 +exec hltv.cfg
Einfach garkeine Meldung. Und wenn ich es ohne den screen Befehl ausführe startet der Server normal.

Achja: Noch eine Frage...Vielleicht liegt es auch daran. Ich muss, bevor ich den ganzen Befehl ausführe erst noch den Befehl
export LD_LIBRARY_PATH=/home/server/server1
ausführen. Den habe ich aber ja auch oben im Script eingebaut. Oder ist der da falsch?

Vielen Dank schon mal.

MfG Hoelsch
 
Wenn du schon 2 Befehle zusammen nutzt, solltest du diese auch richtig miteinander verknüpfen.
Code:
export blabla [b]&&[/b] meinbefehl
Dass du bei dem Screen-Befehl keinen Output bekommst, ist völlig normal. Du wirst schon mit
Code:
screen -list
nachschauen müssen, ob ein Screen gestartet wurde.
Wenn er nicht gestartet wurde, liegt dein Problem mit ziemlicher Sicherheit in der Syntax des Befehls. Dein Skript führt ja nunmal nicht 'hltv blabla' aus, sondern 'screen -A -m -d -S hltv blabla' und somit musst du diesen Befehl testen, denn viele Befehle verhalten sich komplett anders als gewohnt, wenn man sie direkt mit screen starten will.
 
also müsste der befehl dann so lauten?:
case "$1" in
start)
echo "Starting $DESC: $NAME"
if [ -e $DIR ];
then
cd $DIR && export LD_LIBRARY_PATH=$DIR
# Change the lines for running as non-root!
# su $CS_USER - -c "screen -d -m -S $NAME $DAEMON $PARAMS"
screen -A -m -d -S $NAME export LD_LIBRARY_PATH=$DIR $DAEMON $PARAMS
else echo "No such directory: $DIR!"
Und bei screen -list wird er nicht gelistet.

Wie gesagt: Ich hatte den ja einzeln getestet mit screen blabla. Da funktioniert er auch nicht...Nur ohne screen klappt alles :(

Aber ich möchte doch mein schönes start, stop, restart und status script behalten :(

kann grad auch nich testen, weil ich auf arbeit bin und nur windows rechner um mich rum hab *panik*
 
Kannst du doch behalten. Warum muss hltv aber unbedingt im screen starten? Kannst du den nicht einfach im Hintergrund laufen lassen?
 
mit screen finde ich aber schöner und übersichtlicher, da alle server mit screen laufen....mal abgesehen davon weiß ich ehrlich gesagt nicht wirklich wie das geht, den einfach in den hintergrund zu packen :(
 
problem hat sich geklärt.

trotzdem vielen dank für die hilfe.

mfg

hoelsch
 

Ähnliche Themen

Nginx als Reverse Proxy für Nextcloud und Emby

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

Verständnisfrage zu RegExps

Adressvergabe in anderen Subnets

Senior System & Network Admin in Berlin

Zurück
Oben