Page 1 of 1

Hile bei Bashscript ?

Posted: 2006-10-25 15:31
by haui
Hallo liebe Community,

Ich probiere schon einige zeit rum, aber jetzt komm ich wirklch nichtmehr weiter, evt. weiß ja einer von euch rat !?

Und zwar habe ich das folgende Script :

Code: Select all

#! /bin/bash

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

DIR=/var/www/web12/html/shoutcast/test

DAEMON=sc_serv

PARAMS="$3"

NAME="$2"
DESC="Shoutcast"

start() {
   echo "Starte $DESC: $NAME"
   if [ -e $DIR ];
   then
    cd $DIR
    screen -d -m -S $NAME ./$DAEMON $PARAMS
    echo " ... gestartet."
   else echo "Fehlerhaftes Verzeichniss: $DIR!"
   fi
}


getpid() {
kpid=`screen -ls |grep $NAME |awk -F . '{print $4}'|awk '{print $4}'` 
echo "$kpid"
}

case "$1" in
 start)
   start
   ;;

 getpid)
   getpid
   ;;

 restart)
   stop
   start
   ;;

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

esac


exit 0
Wenn ich jetzt das script starte mit ./start TEST sc_serv.conf

funktioniert auch alles super. Er startet das programm und ist auch per ps -aux zu finden.

Wenn ich mir jetzt die PID hole bekomm ich die PID vom gestarteten screen.

Den kann ich auch mit kill $pid beenden.

Allerdings wird das script nicht beendet welches der screen startet.

Worann kann das liegen ?

Hat jemand eine ahnung ?

Währe unendlich dankbar für einen Tip

Gruß

Haui

[/code]

Re: Hile bei Bashscript ?

Posted: 2006-10-25 15:43
by aubergine
arbeite nicht mit screnn sondern direkt mit den Ein- Ausgabe und Fehlerkanälen und dein Problem ist behoben.

Re: Hile bei Bashscript ?

Posted: 2006-10-25 18:53
by haui
Leider nicht möglich da ich das script mit einem perl script anstoße....

und da geht das nur über screen.

Wüsste jetzt auch nicht wie ich das anders realisieren soll...


Gruß

Haui

Re: Hile bei Bashscript ?

Posted: 2006-10-25 18:59
by aubergine
Post mal dein geändertes Perl+Bash Script dann kann ich dir auch helfen.


Oder du belässt es halt bei screen und killst im stop Bereich nicht die PID vom screen, sondern holst dir die Konsole wieder und beendest dann "sauber"

Re: Hile bei Bashscript ?

Posted: 2006-10-25 19:04
by haui

Code: Select all

unlink("/var/www/web12/html/shoutcast/konsole/logs/$id.log");
print "Serverbeschreibung : $serverbeschreibung<br><br>";
$server1 = system("./start start $serverbeschreibung /var/www/web12/html/shoutcast/konsole/conf/$id.conf");

my $neuer = `./start getpid $serverbeschreibung`;
print "<br>Erteilte PID : $neuer <br><br>";
print "Datenbank Connect <br><br>";
&dbconnect;
print "DBABFRAGE-UPDATE - ID $id <br><br>";
my $sth = $dbh->prepare("update serverdaten set run='1', flag='0', startstopp='0', pid='$neuer' WHERE id='$id'");
das ist so der karsus knaxus aus dem perlscript

Gruß

Haui[/code]

Re: Hile bei Bashscript ?

Posted: 2006-10-26 17:31
by aubergine
Bearbeite den Bash Teil insoweit das du für stop und restart Part die Session von Screen wiederholst und schließt.

Re: Hile bei Bashscript ?

Posted: 2006-10-26 20:37
by croc
Soweit ich richtig gelesen hab, bleibt dein Startscript im Hintergrund aktiv?
Versuch mal statt "screen -d -m -S ..." folgendes:
"screen -dmS ..."

Re: Hile bei Bashscript ?

Posted: 2006-10-26 20:57
by haui
Hallo cRoC,

leider auch keinen erfolg, ich starte über selben befehl nen gameserver da klappt das auch mit dem kill ohne sorgen !

Noch irgendeine idee ??

Gruß

Haui

Re: Hile bei Bashscript ?

Posted: 2006-10-27 12:56
by croc
Ich kenn mich mit Shellscripts nich so besonders aus, weil ich nur PHP-scripts auf der Shell benutze, aber vielleicht liegts an dem script?
Schau es Dir nochmal genau an, vielleicht fehlt irgendwo eines der tollen kleinen Zeichen wie {} () [] usw.
Vielleicht fehlt auch ein return-Befehl oder sowas.
Sind nur ein paar Hinweise, wie gesagt, ich kenn mich da nich aus.

Re: Hile bei Bashscript ?

Posted: 2006-11-01 22:12
by lucki2
Allerdings wird das script nicht beendet welches der screen startet.
Das wird an jenem Script liegen, daß da gestarted wird. Wenn sich das der Verantwortung von Screen entzieht(z.b. nohup) läuft das weiter.

An dem Perl Script sehe ich auch nicht, warum du screen nutzen mußt.

Ich vermute(!) Du willst ein Pidfile also eine Zuordnung zwischen Name und Pid? Dann geht das einfach mit einem Verzeichnis und eben einem Pidfile in dem die Pid steht - Schau mal nach /var/run/ - die Dateien, die auf ".pid" enden. Oder wofür brauchst Du screen sonst?