Anzeige:
Ergebnis 1 bis 12 von 12

Thema: kleines streaming script mit wget

  1. #1
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    9

    kleines streaming script mit wget

    hi leutz
    ich möcht mir ein kleines wget script schreiben, dass einen radiostream
    - alle 30 minuten schneidet
    - im hintergrund abläuft auch wenn man nicht angemeldet ist
    - die gespeicherten files nach fünf tagen löscht (zum dauerhaften speichern soll man sie verschieben)
    - wenn möglich ohne cronjob läuft.

    ich hab schon mal ein bischen rumgebastelt , aber da ich die bash auch nit mit der muttermilch aufgesogen hab tu ich mir da a wengala hart
    Code:
    INFILE=http://streaming.bitexpress.de/mp3/bex96.mp3     #eingabe
    OUTFILE=/var/tmp/streaming/biteXpress_courrent.mp3      #ausgabe
    LOGFILE=/dev/null                                       #logausgabe
    LENGTH=10s                                              #wird nach 10 sekunden geschnitten (sleep)
    
    wget -b -o$LOGFILE -O$OUTFILE $INFILE
    sleep $LENGTH
    pkill -U wget
    echo "streamingscript wurde beendet"
    im moment tu ich mir ein bischen hart des ding komplett im hintergrund laufen zu lassen. immer wenn ich das script starte is bash gesperrt und ich muss warten bis es durgelaufen is ganz zu schweigen vom abmelden (soll ein 24 stunden live mitschnitt werden)

    würde mich über eine flotte antwort freuen

    moe

  2. #2
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    Code:
    script &
    oder:
    Code:
    script
    <strg+z>
    bg # in den hintergrund
    # mach irgendetwas
    fg # wieder in den vordergrund
    abmelden würde ich mich an dieser stelle nicht
    dann wird die bash gekillt und dein prozess ist mal gelaufen...
    besser ist es wenn du es als dienst von den init-scripts starten lässt

    greetz

    (vielleicht, sich einfach mal ein wenig mehr mit linux auseinandersetzen *gg*)
    Geändert von quinte17 (15-02-2005 um 09:56 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    9
    hi

    das mit dem hintergrud hab ich mir auch schon ü berlegt aber wie du schon sagtest wird beim abmelden dei bash gekillt und für ne archivierung von nem stream is des net so doll die ganze zeit angemeldet zu sein.

    besser ist es wenn du es als dienst von den init-scripts starten lässt
    wie mach ich das (bin ein kleiner scripting noob bitte helft mir)

    moe

  4. #4
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    welche distri hast du?
    sch mal ob du das verzeichnis:
    /etc/rc.d/init.d
    hast
    und ob des verzeichnis:
    /etc/rc.d/rc5.d

    existiert
    dann könne ma scho was mache ^^

  5. #5
    Registrierter Benutzer
    Registriert seit
    19.07.2004
    Beiträge
    50
    Ansonsten einfach mal im Verzeichnis "/etc/init.d/" schauen, da liegen die Scripte meist. Und da du ja schon ein bischen Bash kannst, sollte es nicht soo schwer sein, ein Script zu kopieren und anzupassen...

    PS: Die Scripte von denen wir hier reden, sind die die du beim Starten auch immer siehst, also nachdem der Kernel geladen wurde. Da steht dann zum Beispiel "Setting network-devices... done" oder sowas. Findest du auf der ersten Konsole (STRG+ALT+F1).
    Geändert von KL47 (15-02-2005 um 11:54 Uhr)

  6. #6
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Das Zauberwort heißt nohup .;-)

  7. #7
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    9
    erstmal danke für eure antworten

    @quinte17: debian sarge

    @romanday: nuhup hab ich versucht nur hab ich es nicht geschaft den sleep-prozess in den hintergrund zu schicken. der sperrt mir immer die bash egal wo ich ihn reinschreib

    die init-scripe in /etc/init.d/ waren ne gute idee(hät ich eigentlich auch selbst drauf kommen können ) leider wars nich so das gelbe vom ei

    im moment siehts so aus:
    Code:
    #!/bin/sh
    # streamingscript fuer jegliche Art von live-streams
    
    pidfile=/home/moe/getstream/wget.pid
    binpath=/usr/bin/wget
    
    input=http://streaming.bitexpress.de/mp3/bex96.mp3
    output=/home/moe/getstream/bitexpress_courrent.mp3
    logfile=/dev/null
    
    test -x $binpath || exit 0
    
    wget -b -o$logfile -O$output $input |\
            grep --only-matching [0-9] > $pidfile           #ermitteln der eindeutigen wget PID
    sleep 30m
    kill 'cat $pidfile'
    also:
    grep brauch ich da mir wget, dass ich mit "-b" im hintergrund starte, ne meldung nach dem Motto "weiter gehts im hintergrund. Prozessnummer XYZ."ausgibt und ich nicht mit "echo $!>$pidfile" die PID schreiben will. Da ich diese script auf verschiedenen Rechnern benutzen will und wenn dann zufällig einer einen anderen Prozess im hintergrund startet, genau zu dem zeitpunkt da das script nen file-cut macht, bin ich gearscht und der rechner läuft über.

    sleep bekomm ich immer noch nicht in den hintergrund. hab mir mal den /etc/init.d/sysklogd angeschaut und der hat da was lustiges von wegen
    Code:
    create_xconsole()
    {
        if [ ! -e /dev/xconsole ]; then
            mknod -m 640 /dev/xconsole p
        else
            chmod 0640 /dev/xconsole
        fi
        chown root:adm /dev/xconsole
    }
    nur steht leider net drinn wie ers auf der /dev/xconsole startet.

    bei grep hab ich leider auch noch ein prob: grep -o gibt mir zwar genau die zeichen aus die ich haben will blos komischer weise schreibt er sie untereinander anstat so wie sie von wget rüberkommen, nämlich nebeneinander.

    tja und zu guter letzt hab ich leider noch keine lösung das der script sich nach kill 'cat $pidfile' selbst wieder startet


    ihr seht also viele viele probleme und kaum eine lösung. wäre echt nett wenn jemandem dazu was einfallen würde


    moe

  8. #8
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von moe61

    bei grep hab ich leider auch noch ein prob: grep -o gibt mir zwar genau die zeichen aus die ich haben will blos komischer weise schreibt er sie untereinander anstat so wie sie von wget rüberkommen, nämlich nebeneinander.

    moe
    Probier mal am Anfang des Scriptes

    IFS=""

    einzufügen.

  9. #9
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    9
    morgen allerseits

    @Romanday: funzt leider net. die ziffern der PID werden immer noch nur Untereinander geschriegen anstatt nebeneinander

    aber nochmal zum hintergrund. hat keinere ne idee wie man ein script auf einer virtuellen console starten kann die schreibgesperrt is??

    moe

  10. #10
    FlashBuster
    Gast
    versuch es einfach mal mit einem Shellskript dass dein script per "screen" aufruft?

  11. #11
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    9
    Hi

    @FlashBuster: screen is'n geiles tool. verwende es auch grad für 's script. is aber trotzdem nich so ganz die lösung die ich mir gewünscht hab

    gitbts keine möglichkeit ein programm auf nem virtuellen terminal auzüführen der keine schreibrechte hat???

    moe

  12. #12
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    9

    so weit so retich :)

    da ich in letzter zeit viel zu tun hatte konnt ich leider net an meiem Tool weiterschreiben. jetzt is es aber fertig und läuft soweit so gut. Um anderen zu helfen(vielleicht hat ja auch jemand nen verbesserungsvorschlag) post ich des etzt hier einfach mal

    Code:
    #!/bin/sh
    # streamingscript fuer jegliche Art von live-streams
    
    IFS=""										#trennzeichen zuruecksetzten
    # globale Variablen
    OUTPATH=/
    PIDFILE=$OUTPATH/pidfile
    BINPATH=/usr/bin/
    DATE=`date +%g%m%d'_'%H%M`
    ALTER=7										#alter in Tagen (mtime)
    
    # wget Variablen
    INPUT=http://
    OUTFILE=/
    LOGFILE=/dev/null
    
    # Ueberpruefung der Variablen
    test -x $BINPATH || exit 0
    if [ ! -e $OUTPATH ]; then mkdir -p $OUTPATH; fi				#$OUTPATH erstellen
    
    case $1 in
      list)											#um die Variablen zu überprüfen
       echo "PID-File: $PIDFILE"
       echo "Date:     $DATE"
       echo "Input:    $INPUT"
       echo "Output:   $OUTPATH$OUTFILE"
       echo "String:   --output-file=$LOGFILE --output-document=$OUTPATH$OUTFILE $INPUT &" 
      ;;
      start)
       wget --output-file=$LOGFILE --output-document=$OUTPATH$OUTFILE $INPUT & 
       ps -auxww | grep $OUTFILE | grep -v grep | awk '{ print $2 }' > $PIDFILE	#ermitteln der eindeutigen wget pid
      ;;
      stop)
       kill `cat $PIDFILE`
       rm $PIDFILE
      ;;
      restart)
       kill `cat $PIDFILE`
       rm $PIDFILE
       wget --output-file=$LOGFILE --output-document=$OUTPATH$OUTFILE $INPUT & 
       ps -auxww | grep $OUTFILE | grep -v grep | awk '{ print $2 }' > $PIDFILE	#ermitteln der eindeutigen wget pid
      ;;
      *)
       echo "Usage (list|start|stop|restart)"
       exit 1
    esac
    
    find $OUTPATH -mtime +$ALTER -delete						#dateien aelter als $ALTER loeschen
    
    exit 0
    Das ganze läuft über einen cronjob(ja ich weiss eigentlich wollte ich ohne. wer da ne bessere idee hat soll sich melden) und wird alle halbe Stunde mit dem Parameter "restart" gestartet.
    Wie gesagt wer nen verbesserungsvorschlag hat. Ich bin für alles offen

    moe

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •