Scriptausgabe umleiten beim Cronjob
#1
Hallo in die Runde der UNIX / Linux-Experten unter uns,

ich hätte da gern mal ein Problem! Big Grin Nee, ich habe eins, und komme dabei nicht so recht weiter. Gegeben sei ein funktionierendes Shellscript, welches per crontab gestartet wird. Es sollen verschiedene Radiosendungen per Stream aufgezeichnet werden. Der Start per cron, um es nicht zu vergessen (Hauptsache der PC ist an Wink ).

Da cron alles im Hintergrund "unsichtbar" startet, wird nur STDERR normalerweise per Mail an root gesandt. Ich, bzw. noch jemand aus unserem Forum hier Wink , würde aber gerne die paar Zeilen Textausgabe, die mein Script generiert, gerne wenigstens irgendwie auf dem Bildschirm sehen. Also damit man überprüfen kann, ob alles glatt läuft und die Aufnahme gestartet wurde.

Als Beispiel sollte da stehen (und steht es auch, wenn ich manuell starte):

Aufnahmedatei: WDR2_blafasel_02.11.2011.mp3
Gespeichert wird in: ~/Musik
Aufnahme läuft... bitte warten!

Diese Ausgaben produziert mein Shellscript bereits, nur möchte ich die irgendwie in einem 'aufpoppenden' Fenster beim Start des cronjobs sichtbar machen.

Hat jemand eine Idee dazu? Ich habe nun stundenlang gelesen, komme aber auf keine praktikable Lösung. Sad

Gruß Jens
Zitieren
#2
Für das Aufpoppen des Fensters kannst Du ja sowas wie xdialog nehmen, wenn es unter X gehen soll.

Ansonsten kannst Du mit echo auch auf stderr schreiben.

Mein Ansatz wäre es ein weiteres Script per cron zu starten, dieses startet dann Dein Aufnahmescript und parst die Ausgabe und startet ggf. xdialog, um Dir zu signalisieren, dass aufgenommen wird.

Gruß!

Sven
Zitieren
#3
Hallo Sven,

erstmal danke! Smile Auf STDERR zu schreiben ist genau das was ich nicht möchte. Es geht ja gerade nicht um eine Fehleranzeige, sondern nur darum, die paar Zeilen auszugeben und das Fenster "verschwinden" zu lassen, wenn die Aufzeichnung beendet ist.

Mit xdialog kann mein Ubuntu 10.10 nichts anfangen. Man fragt mich, ob ich evtl. kdialog (kdebase-bin), gdialog (zenity) oder dialog (dialog) meine. Hm...? Kann ich nicht irgendwie etwas in die xconsole reinschreiben? Nur, wenn ich die auf der Kommandozeile aufrufe, kommt nur "Couldn't open console". Sad

Gruß Jens
Zitieren
#4
Hallo Jens,

meine Linux-Kenntnisse sind noch mehr als bescheiden! Aber kannst die die Ausgabe mit dem ">" Zeichen nicht in jedes beliebige Device, Datei oder Konsole umleiten ?

VG
Michael
Zitieren
#5
Hallo Michael,

natürlich funktioniert das. Nur halt nicht in einem cronjob, der im Hintergrund ausgeführt wird. Man kann, wie schon Sven schrieb, auch den Standard-Output per ">" auch auf STDERR umleiten. Nur das alles erhält der User, der den cronjob im Hintergrund ausführen lässt, erst nach Beendigung des Jobs per Mail. Und das nutzt mir leider nichts. Sad

Gruß Jens
Zitieren
#6
Wenn Du gnome installiert hast, dann nehme das gdialog. Lese Dir dazu die Man-Page durch und Du verstehst, wie Du in kurzer Zeit ansehnliche Dialoge bauen kannst.

kdialog ist das KDE-Pendant dazu und nur "dialog" ist das curses/Konsolen-Pendant.

Gruß!

Sven
Zitieren
#7
Hallo Sven,

tjaaa, mit Zenity kann man schon einiges machen, logisch. Nur nützt mir das alles nichts, wenn ich es irgendwie vorher starten muss statt es erst im crontab-Script. Ich kann maximal, und das habe ich eigentlich vor, die Ausgabe meine Scripts in eine Datei oder eine Pipe schreiben und diese dann von "außerhalb" lesen. Irgendwie muss das doch gehen. Wink

Gruß Jens
Zitieren
#8
So, es ist erledigt, das Problem ist "erschlagen" und vollkommen gelöst. :tanz:

Prinzipiell ist es so, dass man Ausgaben von auch im Hintergrund (also z.b. per cronjob) gestarteten Scripten schon auf der grafischen Oberfläche doch ausgeben kann. Der "Rätsels Lösung" war dann einfach doch Zenity. Das ermöglicht eine einfache Scriptsprache, die ich aber nicht benötigte. Es sollte lediglich dazu dienen anzuzeigen, dass eine automatisierte Aufnahme gestartet wurde und auch abgeschlossen wurde.

Der einzige Trick dabei ist, dass man als Option noch die Ausgabe definieren muss: '--display=:0" war das, was mir noch gefehlt hat. So erscheinen Ausgaben auch auf der grafischen Oberfläche von Linux.

Vielleicht interessiert hier jemanden mein cronjob-Script, welches sich leicht auf beliebige Webstreams abändern lässt. Kommentare habe ich eigentlich genügend verwendet, wenn noch Fragen offen sind, bitte nachfragen. :winker:

--------------------- schnipp ---------------------
#!/bin/bash

# Dateiablage in
pathname=$HOME/Musik/

# Text der aufzuzeichnenden Sendung anpassen
# Beispiel-Dateiname ist dann 'Sendung_01112011-04:38.mp3'
streamname='R.SA-Sachsen'

# Name des aufzuzeichnenden Streams im MP3-Format
visualname=$streamname"_"`date +%d.%m.%Y-``date +%H:%M.mp3`
mp3name=$pathname$streamname"_"`date +%d.%m.%Y-``date +%H:%M.mp3`

# Angabe der Stream-URL
# hier: R.SA Sachsen
[url='http://stream.hoerradar.de/mp3-rsasachsen-128'

# Stream aufzeichnen
mplayer -dumpstream -dumpfile $mp3name $url &

# PID von mplayer feststellen, um ihn nach einzugebender Zeit abzubrechen
pid=$!

# Start-Ausgabe über Zenity
zenity --display=:0 --info --text " Speichere: "$visualname"\n Abgespeichert wird unter: "$pathname"\n\n Dieses Fenster kann nun geschlossen werden." --title "Speicherung von "$streamname" gestartet" &

# Aufzeichnungsdauer zu Testzwecken hier nur 0:01 h, die Zeit hinter dem 'sleep' wird in Sekunden angegeben
sleep 60

# mplayer-Prozess abbrechen, da die Aufnahmezeitspanne abgelaufen ist
kill $pid

# End-Ausgabe über Zenity
zenity --display=:0 --info --text " Speicherung von "$streamname" beendet." --title "Abgeschlossen!" &

--------------------- schnapp ---------------------

Gruß Jens
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste