• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

screen Startscript soll Prozess mit bestimmten User starten

kleineso

Newbie
Hallo,


ich habe nun dieses Webinterface bei mir eingebaut und versucht das dazugehörige Startscript nach den Vorlagen hier aus dem Forum anzupassen. Mein Ziel war es, den Prozess für den zu startenden Gameserver unter einem bestimmten Benutzer laufen zu lassen. Leider startet kein Prozess beim Aufruf des Scripts :-/

Code:
#! /bin/sh  
#scriptquelle : http://www.linuxforen.de
G_USER=spearhead
NAME=spearhead
DESC="Medal of Honor spearhead  v2.15"
PARAMS="+set dedicated 2 +set net_port 12203 +exec clstow.cfg"
DIR=/home/spearhead/mohaa
SCRIPT=spearhead_lnxded

DAEMON=$DIR/$SCRIPT

case "$1" in
start)
    if [[ `su $G_USER -c "screen -ls |grep $NAME"` ]]
    then
        echo "$DESC is already running!"
    else
	echo "Starte $DESC: $NAME"
	cd /
	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: $NAME "
       kill `ps aux | grep -i screen | grep -i $NAME | awk '{print $1}'` 
	    #screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... Server gestoppt."
  else
       echo "Konnte keinen laufenden Server mit PID -- $DESC -- nicht finden"
   fi
   ;;

restart)
    if [[ `su $G_USER -c "screen -ls |grep $NAME"` ]]
    then
	echo -n "Stoppe $DESC: $NAME "
        kill `ps aux | grep -i screen | grep -i $NAME | awk '{print $1}'`
	    #screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
        echo " ... Server gestoppt ... Kommando Start wird ausgeführt"
    else
        echo "Konnte keinen laufenden Server mit PID -- $DESC -- nicht finden ... Kommando Start wird ausgeführt"
    fi
    
	echo -n "Starte $DESC: $NAME "
	su $G_USER -c "cd $DIR; screen -d -m -S $NAME $DAEMON $PARAMS"
	    #cd $DIR
	    #screen -d -m -S $NAME $DAEMON $PARAMS
        echo " ... Server gestartet."
   ;;

status)
ps aux | grep -v grep | grep spearhead > /dev/null
CHECK=$?
[ $CHECK -eq 0 ] && echo "Spearhead is UP" || echo "Spearhead_TOW is DOWN"
;;
*)
   echo "Usage: $0 Parameter eingeben {start|stop|restart|status}"
   exit 1 
   ;;
esac

exit 0

Der auf dem System liegende Benutzer (G_USER) heisst "spearhead". Mir ist nicht so ganz klar, was ich bei der Variable 'NAME' genau eintragen soll.
Nichts desto trotz ist da irgendwo noch ein Fehler. Bitte um Hilfe.


Danke & Gruß, olli


[edit]
Das Script habe ich nat. direkt unter Linux angepasst, auch wenn es hier nicht so aussieht!
 

nobbiew

Hacker
Wäre schön, wenn du mitteilen würdest was er meldet, wie er sich verhält, wie du das Script aufrufst???
 
OP
K

kleineso

Newbie
Das glaube ich das dir das gefallen würde, aber leider bekomme ich keine FM.

Ich erhalte nur die Ausgabe wie im Script festgelegt:
Code:
 echo "$DESC is already running!"
Aber es ist kein Prozess am laufen.

Gestartet wird das Script durch # ./scriptname

Any hints?


Danke, olli
 

oc2pus

Ultimate Guru
Dein Strscript entspricht nicht so ganz dem Aufbau den SuSE erwartet :)
lies hier:
http://www.linux-club.de/viewtopic.php?t=16069

wenn du nicht genau weisst was das Script zum "sterben" bringt, setze den Befehl
an den Anfang nach #! /bin/sh dann siehst du was genau passiert, das ist sehr hilfreich um den Fehler einzukreisen.

Diese Ausgabe solltest du dann auch mal posten ...
 
OP
K

kleineso

Newbie
Yo oc2opus,


set -x habe ich gleich reingefummelt:

h4567:/home/obe/apache/cls-crew.com/webinterface # ./clstow start
sh-2.05b# exit
exit
++ G_USER=spearhead
++ NAME=spearhead
++ DESC=Medal of Honor spearhead v2.15
++ PARAMS=+set dedicated 2 +set net_port 12203 +exec clstow.cfg
++ DIR=/home/spearhead/mohaa
++ SCRIPT=spearhead_lnxded
++ DAEMON=/home/spearhead/mohaa/spearhead_lnxded
+++ su spearhead -c 'screen -ls |grep spearhead'
++ [[ -n No Sockets found in /var/run/uscreens/S-spearhead. ]]
++ echo 'Medal of Honor spearhead v2.15 is already running!'
Medal of Honor spearhead v2.15 is already running!
++ exit 0
h4567:/home/obe/apache/cls-crew.com/webinterface # cd /var/run/uscreens
h4567:/var/run/uscreens # ls- al
-bash: ls-: command not found
h4567:/var/run/uscreens #

Ich komm jetzt noch nicht so ganz mit was deine Runlevel Scripts mit meinem screen Script zu tun haben - ich weiss es ganz einfach nicht.

Hintergrund ist der, dass das Script welches über das Webinterface gestartet werden soll, nicht unter dem Benutzer des Webservers laufen soll.


Viele Grüße, olli
 

oc2pus

Ultimate Guru
+++ su spearhead -c 'screen -ls |grep spearhead'
++ [[ -n No Sockets found in /var/run/uscreens/S-spearhead. ]]
das ist die tatsächliche Ausgabe deines Befehles:
if [[ `su $G_USER -c "screen -ls |grep $NAME"` ]]

und dieses Ergebnis ist != 0, also wahr ==> die Ausgabe das dein Dienst schon läuft ....

Ich denke die Überprüfung ob dein Dienst schon läuft sollte überarbeitet werden.

Vorschlag:
starte das Programm Screen und erstelle eine Datei /var/run/$0.pid wenn das Programm gestartet wurde. Die Datei kannst du mit touch /var/run/$0.pid erstellen.
Dann kannst du mit
Code:
if [ -f /var/run/$0.pid ]
testen ob das Script bereits läuft. $0 entspricht dem Scriptnamen.
Spiegelbildlich, wenn dein Script mit stop aufgerufen wurde löschst du diese Datei wieder.
Ein Tip:
Code:
   restart)
      $0 stop
      $0 start
      ;;
ist wesentlich kürzer und macht das gleiche :)

ein Blick auf die Programme checkproc, startproc, killproc könnte dir auch weiterhelfen.


ad Runlevelscript: ich dachte du wolltest es direkt beim booten starten.. vergiss den Einwurf einfach :)
 
Oben