Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

screen Startscript soll Prozess mit bestimmten User starten

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
kleineso
Newbie
Newbie
Beiträge: 33
Registriert: 28. Apr 2004, 23:14
Wohnort: Düsseldorf
Kontaktdaten:

screen Startscript soll Prozess mit bestimmten User starten

Beitrag von kleineso »

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: Alles auswählen

 
#! /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!
Benutzeravatar
nobbiew
Hacker
Hacker
Beiträge: 497
Registriert: 1. Mär 2004, 23:26

Beitrag von nobbiew »

Wäre schön, wenn du mitteilen würdest was er meldet, wie er sich verhält, wie du das Script aufrufst???
kleineso
Newbie
Newbie
Beiträge: 33
Registriert: 28. Apr 2004, 23:14
Wohnort: Düsseldorf
Kontaktdaten:

Beitrag von kleineso »

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: Alles auswählen

 echo "$DESC is already running!"  

Aber es ist kein Prozess am laufen.

Gestartet wird das Script durch # ./scriptname

Any hints?


Danke, olli
Zuletzt geändert von kleineso am 16. Dez 2004, 12:56, insgesamt 1-mal geändert.
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

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
set -x
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 ...
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
kleineso
Newbie
Newbie
Beiträge: 33
Registriert: 28. Apr 2004, 23:14
Wohnort: Düsseldorf
Kontaktdaten:

Beitrag von kleineso »

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
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

+++ 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: Alles auswählen

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: Alles auswählen

   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 :)
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
Antworten