ubuntuusers.de

Archiv/Last-Exit

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |
Dieses Thema ist die Diskussion des Artikels Archiv/Last-Exit.

Heinrich_Schwietering Team-Icon

Wikiteam
(Themenstarter)
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11325

Wohnort: Bremen

Hallo Grek336

Leider funktioniert es noch weniger - nach Start des auf Vagalume umgeschriebenen skripts passiert bei mir nur das:

heinrich@ubuntu:~$ ./WatchDog.py
Zu wenige Argumente
Watchdog [Programm] [LastFMUrl] [TempFile] optional [Kontrollintervall]
Kontrollintervall ist standardmäßig 60 Sekunden
Traceback (most recent call last):
  File "./WatchDog.py", line 82, in <module>
    print (sys.argv[1])
IndexError: list index out of range

☹ ☹ 😢

so long
hank

Grek336

Anmeldungsdatum:
28. November 2007

Beiträge: 408

Hallo Heinrich Schwietering.

Ein paar Parameter brauchst du schon:

./WatchDog.py vagalume "lastfm://artist/Mariah Carey/similarartists" "/tmp/vagalume-michael" 60
  1. Parameter: welches Programm soll aufgerufen werden

  2. Parameter: Welcher Parameter soll an das Programm in Parameter 1 übergeben werden

  3. Parameter: Wie heißt die Datei die überwacht werden soll

  4. Parameter (optional): Wie lang soll der Kontrollintervall sein

Im Beispiel oben soll es also heißen:

  • Rufe das Programm "vagalume" mit dem Parameter "lastfm://artist/Mariah Carey/similarartists" auf.

  • Kontrolliere die Datei "/tmp/vagalume-michael" alle 60 Sekunden.

Allerdings habe ich festgestellt das in Intrepid das Änderungsdatum nicht aktualisiert wird. Deswegen wird alle 2 Minuten vagalume beendet und wieder neu aufgerufen. Wenn ich in Nautilus allerdings mit F5 (wenn ich im Verzeichnis /tmp bin) die Anzeige regelmäßig erneuere passiert das nicht. Es sieht so aus als ob ab Intrepid (oder schon ab Hardy) das Änderungsdatum einer Datei nicht ständig erneuert wird. Wenn man das mit Nautilus über F5 macht allerdings schon. Die Frage ist also wie kann man das Datei- bzw. Betreibssystem dazu bringen die Änderungszeit für die Datei regelmäßig zu erneuern.

Ich habe gerade herausgefunden das es einen Unterschied zwischen getatime und getmtime gibt. Und dann gibt es noch os.stat(FileToControl).st_mtime. Mal sehen ob das hilft.

Grüße aus Berlin

Nachtrag: Das mit getatime <> getmtime war wohl der Fehler. Allerdings habe ich möglicherweise noch einen Fehler in der BeendeProgramm Funktion. Sie funktioniert zwar aber anders als sie soll.

Nachtrag 2: Und hier das Python Programm

WatchDog5.py (6.3 KiB)
5. Version von WatchDog für vagamule und last-exit
Download WatchDog5.py

Heinrich_Schwietering Team-Icon

Wikiteam
(Themenstarter)
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11325

Wohnort: Bremen

Hi!

Grek336 schrieb:

Ein paar Parameter brauchst du schon:

./WatchDog.py vagalume "lastfm://artist/Mariah Carey/similarartists" "/tmp/vagalume-michael" 60
  1. Parameter: welches Programm soll aufgerufen werden

  2. Parameter: Welcher Parameter soll an das Programm in Parameter 1 übergeben werden

  3. Parameter: Wie heißt die Datei die überwacht werden soll

  4. Parameter (optional): Wie lang soll der Kontrollintervall sein

Im Beispiel oben soll es also heißen:

  • Rufe das Programm "vagalume" mit dem Parameter "lastfm://artist/Mariah Carey/similarartists" auf.

  • Kontrolliere die Datei "/tmp/vagalume-michael" alle 60 Sekunden.

Ooops - Denkfehler bei mir - ich hatte im Skript selbst die entsprechenden Angaben gemacht...(siehe Frage im Edit unten)

Allerdings habe ich festgestellt das in Intrepid das Änderungsdatum nicht aktualisiert wird. Deswegen wird alle 2 Minuten vagalume beendet und wieder neu aufgerufen. Wenn ich in Nautilus allerdings mit F5 (wenn ich im Verzeichnis /tmp bin) die Anzeige regelmäßig erneuere passiert das nicht. Es sieht so aus als ob ab Intrepid (oder schon ab Hardy) das Änderungsdatum einer Datei nicht ständig erneuert wird. Wenn man das mit Nautilus über F5 macht allerdings schon. Die Frage ist also wie kann man das Datei- bzw. Betreibssystem dazu bringen die Änderungszeit für die Datei regelmäßig zu erneuern.

Ja, das hatte ich ja oben schon im Edit vermutet; aber wie das umgangen werden kann, weiß ich allerdings auch nicht...

Nachtrag 2: Und hier das Python Programm

Werde' gleich mal testen!

so long
hank

EDIT Das neue script funktioniert; Vagalume startet und bricht auch nicht ab! Jetzt muß ich nur noch auf 'nen "Connection Error" oder so was warten, aber der kommt sicher - Vagalume behauptet immer mal, dass trotz reichlich gefüllter Playlist kein Titel mehr zur Wiedergabe vorhanden wäre 😉.

Aber mir ist nicht ganz klar, was diese Zeilen im Skript zu bedeuten haben (Zeile 61-66)

DateiNichtGefunden = 0
WarteZeit = 60
Programm = 'last-exit'
LastFMUrl = 'lastfm://artist/Dannii Minogue/similarartists'
FileToControl = '/tmp/lastexit-michael'
ZuWenigeArgumente = True

Ich habe sie erstmal nicht geändert; es funktioniert auch so. Sind das "debugging"-Parameter? Sollte ich dann wohl auf meine Start-Angaben einstellen. Außerdem finden sich etliche "LastExit"s im Programm; sollte ich wohl auch entsprechend anpassen?

Noch komfortabler wäre es vielleicht, das Skript mit Zenity auzupeppen; werd' ich mal versuchen, ob das geht.

Besten Dank erst einmal!

Grek336

Anmeldungsdatum:
28. November 2007

Beiträge: 408

Heinrich Schwietering schrieb:

Aber mir ist nicht ganz klar, was diese Zeilen im Skript zu bedeuten haben (Zeile 61-66)

DateiNichtGefunden = 0
WarteZeit = 60
Programm = 'last-exit'
LastFMUrl = 'lastfm://artist/Dannii Minogue/similarartists'
FileToControl = '/tmp/lastexit-michael'
ZuWenigeArgumente = True

Das sind noch Überreste von früher. Jede (na ja nicht wirklich jede Variable) hat so einen Anfangswert. Die Initialisierungen von Programm, LastFMUrl und FileToControl sind eigentlich überflüssig geworden. DateiNichtGefunden ist eventuell auch überflüssig. WarteZeit und ZuWenigArgumente sind nötig (glaube ich).

Ich habe sie erstmal nicht geändert; es funktioniert auch so. Sind das "debugging"-Parameter? Sollte ich dann wohl auf meine Start-Angaben einstellen. Außerdem finden sich etliche "LastExit"s im Programm; sollte ich wohl auch entsprechend anpassen?

Das Debug = True irgendwo relativ am Anfang ist der Debugging-Schalter der dann zusätzliche Ausgaben auf Standard-Out schreibt. Die kann man dann im Terminal sehen oder wie ich hier in DrPython oder Eric. Ist leider "festverdrahtet" da ich nicht wusste wie ich auf die schnelle die Parametererkennung umschreiben müsste damit es über die Kommandozeile funktioniert.

Die Variable LastExit stammen auch noch aus der "Frühzeit" der Programmentwicklung. Die Variablen brauchen halt Namen. Das ist sozusagen der Zeiger auf die Datenstruktur für den aufgerufenen Prozess. In deinem Fall also Vagamule.

Noch komfortabler wäre es vielleicht, das Skript mit Zenity auzupeppen; werd' ich mal versuchen, ob das geht.

Da muss ich mal sehen was Zenity ist. Da du mir schon gleich einen Link darauf gesetzt hast.

Da "Programm" ist ja eigentlich nur entstanden weil ich mich immer über das Anhalten von last-exit geärgert habe. Ein Wut-Baby sozusagen. Ich dachte das ich die wesentlichen Probleme dabei hätte eine zuverlässige Methode zu finden um das Anhalten zu erkennen, den Abbruch zu erreichen und last-exit wieder neu zu starten. Allerdings hatte ich mehr Probleme in Python die richtigen Befehle für das Starten von Programmen zu finden. Und dann hat sich ja noch der Fehler mit getatime und getmtime ergeben.

Das ist im wahrsten Sinne des Wortes eine Bastelarbeit, sozusagen eine "Fliegende Verdrahtung".

Grüße aus Berlin

PS: Bei mir läuft Watchdog seit ca. 23:30 gestern und Vagamule muss zumindest ein mal angehalten haben. Ist es eigentlich normal das Vagamule in 4,5 Stunden ca. 1 Stunde Rechenzeit verbraucht, oder liegt das an meiner VM?

Heinrich_Schwietering Team-Icon

Wikiteam
(Themenstarter)
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11325

Wohnort: Bremen

Hi!

Grek336 schrieb:

Das sind noch Überreste von früher. Jede (na ja nicht wirklich jede Variable) hat so einen Anfangswert. Die Initialisierungen von Programm, LastFMUrl und FileToControl sind eigentlich überflüssig geworden. DateiNichtGefunden ist eventuell auch überflüssig. WarteZeit und ZuWenigArgumente sind nötig (glaube ich).

OK, test ich mal aus...

Das Debug = True irgendwo relativ am Anfang ist der Debugging-Schalter der dann zusätzliche Ausgaben auf Standard-Out schreibt. Die kann man dann im Terminal sehen oder wie ich hier in DrPython oder Eric. Ist leider "festverdrahtet" da ich nicht wusste wie ich auf die schnelle die Parametererkennung umschreiben müsste damit es über die Kommandozeile funktioniert.

Na, das geht etwas über meinen Horizont hinaus...

Die Variable LastExit stammen auch noch aus der "Frühzeit" der Programmentwicklung. Die Variablen brauchen halt Namen. Das ist sozusagen der Zeiger auf die Datenstruktur für den aufgerufenen Prozess. In deinem Fall also Vagamule.

Jupp, funktioniert auch einwandfrei; ich hab' Vagalume dann einfach mal angehalten; es wurde dann tatsächlich beendet, und dann auch wieder gestartet; alles, wie es soll 👍

Da muss ich mal sehen was Zenity ist. Da du mir schon gleich einen Link darauf gesetzt hast.

Ich weiß nicht, ob das mit python funktioniert, ist halt was für GUI-Futzis wie mich, die sich gerne mal vertippen auf der Kommandozeile 😉

Da "Programm" ist ja eigentlich nur entstanden weil ich mich immer über das Anhalten von last-exit geärgert habe. Ein Wut-Baby sozusagen. Ich dachte das ich die wesentlichen Probleme dabei hätte eine zuverlässige Methode zu finden um das Anhalten zu erkennen, den Abbruch zu erreichen und last-exit wieder neu zu starten. Allerdings hatte ich mehr Probleme in Python die richtigen Befehle für das Starten von Programmen zu finden. Und dann hat sich ja noch der Fehler mit getatime und getmtime ergeben.

Jaja, ich müsste dafür dann halt doch noch Informatik studieren (oder zumindest 'nen Volkshochschulkurs in py belegen... 😊

PS: Bei mir läuft Watchdog seit ca. 23:30 gestern und Vagamule muss zumindest ein mal angehalten haben. Ist es eigentlich normal das Vagamule in 4,5 Stunden ca. 1 Stunde Rechenzeit verbraucht, oder liegt das an meiner VM?

Verstehe ich jetzt auch nicht ganz - "Rechenzeit verbraucht"? Aber es geht wohl um den Umgang mit Rechner-Ressourcen, und da steckt dann ggf. PulseAudio dahinter, das unter intrepid Standard-Soundserver ist; und das frisst unglaublich viel Rechnerleistung...

so long
hank

Grek336

Anmeldungsdatum:
28. November 2007

Beiträge: 408

Hallo Heinrich Schwietering!

Das Debug = True irgendwo relativ am Anfang ist der Debugging-Schalter der dann zusätzliche Ausgaben auf Standard-Out schreibt. Die kann man dann im Terminal sehen oder wie ich hier in DrPython oder Eric. Ist leider "festverdrahtet" da ich nicht wusste wie ich auf die schnelle die Parametererkennung umschreiben müsste damit es über die Kommandozeile funktioniert.

Na, das geht etwas über meinen Horizont hinaus...

Ist ganz einfach und primitiv:

Wenn ich nichts nachträglich am Quellcode verändert habe steht in Zeile 59

1
Debug = True

Also nur eine globale Variable die ich auf True (wahr) setze.

An verschiedenen Stellen im Quellcode (z.B Zeile 10,14,24,...) findest du

1
if Debug: print ('(WatchDog) '+'['+time.asctime(time.localtime(time.time()))+'] '+ #...hier steht dann jeweils was anders, je nachdem was ausgegeben werden soll

Dadurch wird (wenn du WatchDog im Terminal ausführst) jeweils eine Zeile mit Informationen ausgegeben. Wenn du Debug = False hinschreibst ist Schuss damit und WatchDog hält die Klappe. Normalerweise macht man so etwas über eine zusätzliche Option in der Kommandozeile wie --debug, aber da meine Erkennungsroutine (Zeile 68-84) sehr primitiv ist kann ich so eine Option nicht erkennen ohne sie komplet neu zu schreiben. Ist eben alles eine Bastelarbeit. Sag niemanden das ich vor über 20 Jahren mal Informatik studiert habe (bevor ich krank wurde).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
if len(sys.argv) < 4 :
    print('Zu wenige Argumente')
    print('Watchdog [Programm] [LastFMUrl] [TempFile] optional [Kontrollintervall]')
    print('Kontrollintervall ist standardmäßig 60 Sekunden')
else:
    ZuWenigeArgumente = False
    print ('Argument 1: '+sys.argv[1])
    Programm = sys.argv[1]
    print ('Argument 2: '+sys.argv[2])
    LastFMUrl = sys.argv[2]
    print ('Argument 3: '+sys.argv[3])
    FileToControl = sys.argv[3]
if len(sys.argv) == 5 :
    print ('Argument 4: '+sys.argv[4])
    WarteZeitTemp = float(sys.argv[4])
    if WarteZeitTemp >= 5:
        WarteZeit = float(sys.argv[4])

Da muss ich mal sehen was Zenity ist. Da du mir schon gleich einen Link darauf gesetzt hast.

Ich weiß nicht, ob das mit python funktioniert, ist halt was für GUI-Futzis wie mich, die sich gerne mal vertippen auf der Kommandozeile 😉

Ich habe mir einen Starter angelegt mit z.B. folgendem Inhalt in Befehl:

"/media/disk/Programmieren/Python/last-exit/WatchDog4.py" vagalume "lastfm://artist/Girls Aloud/similarartists" "/tmp/lastfm-michael" 60

Falls du beim Start jedoch auswählen möchtest was du jeweils hören willst, müsstest du dir ein Script schreiben das dich nach dem Künstler fragt (oder nach der Playlist).

PS: Bei mir läuft Watchdog seit ca. 23:30 gestern und Vagamule muss zumindest ein mal angehalten haben. Ist es eigentlich normal das Vagamule in 4,5 Stunden ca. 1 Stunde Rechenzeit verbraucht, oder liegt das an meiner VM?

Verstehe ich jetzt auch nicht ganz - "Rechenzeit verbraucht"? Aber es geht wohl um den Umgang mit Rechner-Ressourcen, und da steckt dann ggf. PulseAudio dahinter, das unter intrepid Standard-Soundserver ist; und das frisst unglaublich viel Rechnerleistung...

Unter Intrepid wird in der Systemüberwachung (Hauptmenü → System → Systemverwaltung → Systemüberwachung) unter anderem die verbrauchte CPU-Zeit angezeigt. Nachdem Vagalume ca. 4 1/2 Stunden lief wurde ca. 1 Stunde CPU-Zeit angezeigt. Das ist eine Menge. Bei mir läuft TheLastRipper seit ca. 1 3/4 Tagen und hat erst ca. 20 Minuten verbraucht.

Grüße aus Berlin

Heinrich_Schwietering Team-Icon

Wikiteam
(Themenstarter)
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11325

Wohnort: Bremen

Hi!

Grek336 schrieb:

Ist ganz einfach und primitiv:

Wenn du das sagst...

Sag niemanden das ich vor über 20 Jahren mal Informatik studiert habe (bevor ich krank wurde).

Versprochen 😀 - Die Krankheit hieß aber nicht "Lastfm-Sucht?"... 😉

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
if len(sys.argv) < 4 :
    print('Zu wenige Argumente')
    print('Watchdog [Programm] [LastFMUrl] [TempFile] optional [Kontrollintervall]')
    print('Kontrollintervall ist standardmäßig 60 Sekunden')
else:
    ZuWenigeArgumente = False
    print ('Argument 1: '+sys.argv[1])
    Programm = sys.argv[1]
    print ('Argument 2: '+sys.argv[2])
    LastFMUrl = sys.argv[2]
    print ('Argument 3: '+sys.argv[3])
    FileToControl = sys.argv[3]
if len(sys.argv) == 5 :
    print ('Argument 4: '+sys.argv[4])
    WarteZeitTemp = float(sys.argv[4])
    if WarteZeitTemp >= 5:
        WarteZeit = float(sys.argv[4])

Naja, so halbwegs verstehe ich es ja vielleicht...

Ich habe mir einen Starter angelegt mit z.B. folgendem Inhalt in Befehl:

"/media/disk/Programmieren/Python/last-exit/WatchDog4.py" vagalume "lastfm://artist/Girls Aloud/similarartists" "/tmp/lastfm-michael" 60

Ja, gute Idee! Da ich meist sowieso meine (ständig aktualisierte 😉 ) Playlist rippe, werd' ich das wohl auch so machen!

Falls du beim Start jedoch auswählen möchtest was du jeweils hören willst, müsstest du dir ein Script schreiben das dich nach dem Künstler fragt (oder nach der Playlist).

Ja, das war mein Gedanke mit Zenity, aber tippen muss ich da auch (gerade hab' ich mich z.B gewundert, dass Vagalume immer beendet wurde, bis ich dann feststellen musste, dass ich /tmp/vagamlume-heinrich geschrieben hatte...

Unter Intrepid wird in der Systemüberwachung (Hauptmenü → System → Systemverwaltung → Systemüberwachung) unter anderem die verbrauchte CPU-Zeit angezeigt. Nachdem Vagalume ca. 4 1/2 Stunden lief wurde ca. 1 Stunde CPU-Zeit angezeigt. Das ist eine Menge. Bei mir läuft TheLastRipper seit ca. 1 3/4 Tagen und hat erst ca. 20 Minuten verbraucht.

Was sich doch alles unter der Haube verbirgt! Unter den Einstellungen hab' ich es dann ja auch gefunden... Vagalume ist wohl etwas anspruchsvoller als TheLastRipper (das verwendet den Prozessor wohl hauptsächlich beim Abspeichern, weil die Songs anders als bei Vagalume zunächst mal im Speicher landen)

  • denk' ich mir jetzt mal so...

so long
(grüß' mir Berlin, die Tage über Silvester waren viel zu kurz...)
hank

Heinrich_Schwietering Team-Icon

Wikiteam
(Themenstarter)
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11325

Wohnort: Bremen

Hi!

Läuft jetzt alles bestens mit dem WatchDog; eine Kleinigkeit: wie könnte man das Skript dazu bewegen, beim Starten nicht die angegebene Wartezeit "auszusitzen", sonder gleich loszulegen?

Was mir noch aufgefallen ist: Manchmal lässt sich das "bewachte" Programm regulär im Programmfenster selbst beenden; WatchDog beendet sich dann auch nach der Wartezeit; mit der Meldung ""Programm" hat sich ohne Fehler beendet".

Manchmal bleibt aber der WatchDog dann aktiv; und das bewachte Programm startet nach der Wartezeit wieder neu... 😲 ; Beenden nur über Abschalten des WatchDogs möglich... Ich hab noch kein System dahinter entdeckt; hängt es ggf davon ab, ob der Track, bei dem ich abschlte, gescrobbelt wurde oder nicht? Bisher beziehen sich meine Beobachtungen auf Vagalume, dort habe ich standardmäßig das "Scrobbeln" der Titel erlaubt.

Werde das Skript mal im Wiki verlinken, vielleicht nervt ja auch andere, dass es zu Abbrüchen und Hängenbleibern kommt ☺

so long
hank

LiDa

Anmeldungsdatum:
6. Juni 2008

Beiträge: Zähle...

Wohnort: Winterthur

Hi Ich entdeckte vor einer Woche LastFM und nervte mich über die Unterbrüche von vagalume dieser Beitrag hat mir sehr geholfen. Dennoch gehöre ich zu den GUI-Futzis. Darum habe ich mich bemüht das Programm WatchDog mit zenity auszustatten, weil ich jedoch keine Erfahrung mit Python habe (ich weiss nicht ob zenity überhaubt mit Python funktioniert), habe ich mich entschieden das Programm in ein shell script umzuschreiben. Das Programm wie ich es angehängt habe, ist bei mir in Gebrauch und funktioniert für vagalume.

Falls jemand auch lieber ein Programm mit einem minimalen GUI hat stellt diese Variante eine alternative dar. Es können am Anfang in der Datei unter Konfiguration die Standartwerte für das Programm eingegeben werden damit nicht immer alles eingegeben werden muss.

WatchCat.sh (5.4 KiB)
Programm zum überwachen von vagalume
Download WatchCat.sh

Heinrich_Schwietering Team-Icon

Wikiteam
(Themenstarter)
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11325

Wohnort: Bremen

Hi!

@ LiDa

Im Prinzip sehr schön; so hatte ich mir das mit Zenity in etwa vorgestellt!

(Ich musste allerdings erst mal die erste Zeile in #!/bin/bash umwandeln; das ist eigentlich der Standard-Ort dafür (ja, wirklich mit d, ist ja keine Standarte 😉 ))

In der Praxis passiert bei mir allerdings dieses: Vagalume startet, es kommt aber zu diesen Fehlermeldungen (sind mir bisher noch nicht so aufgefallen)

vagalume:7451): GLib-CRITICAL **: g_markup_escape_text: assertion `text != NULL' failed

(vagalume:7451): GLib-CRITICAL **: g_string_append: assertion `val != NULL' failed
Debug - (WatchCat) [ CET ] Program id 
Debug - (WatchCat) [ CET ] Endlosschlaufe
heinrich@ubuntu:~$ 

Vagalume läuft weiter, es wird allerdings der gespielte Sender nicht mehr angezeigt (es ist aber der, der im Skript angegeben war); das Skript scheint sich allerdings verabschiedet zu haben...

EDIT: Die Fehlermeldung scheint ein allgemeines Problem zu sein, ggf. haben die Lastfm-Leute mal wieder was umgestellt. TheLastRipper zeigte schon länger nicht mehr den gespielten Sender an; vielleicht ist jetzt wieder etwas am audioscrobbler-Protokoll o.ä. geändert worden... Der WatchDog läuft aber auch mit den Meldungen weiter. Die GLib-CRITICAL Meldungen beziehen sich also wohl nur das Zusammenspiel von Vagalume und lastfm; Last-Exit teste ich jetzt auch noch mal darauf - und siehe da: Auch hier keine Angabe mehr zum gespielten Sender!

Wenn es aber ansonsten funktioniert:
Jetzt noch in die Zenity-Fenster etwas mehr Erläuterungen in den Text (Beispiele, ggf. ein lastfm:// als vorgegebenen Anfang für die URL etc.), und das ganze wird richtig anschaulich!

(Ich komme auch mit meinem Starter im Hauptmenü gut klar, das stehen meine Standard-Werte drin; aber wer öfter verschiedene Sender verwendet, ist damit natürlich besser bedient. Da fällt mir noch was eine: Was passiert, wenn ich zwischendurch den Sender wechsele, und es kommt dann zu Abbrüchen? Startet das überwachte Programm mit den neuen oder den in der Standardeinstellung gespeicherten Werten? - Na, ich werd's mal mit dem WatchDog ausprobieren...)

so long
hank

LiDa

Anmeldungsdatum:
6. Juni 2008

Beiträge: 3

Wohnort: Winterthur

Hi
Das Problem liegt am Script ich habe den Eintrag:

1
id=$(ps -e | grep $Programm | cut -d" " -f1)

nach:

1
id=$(pidof $Programm)

geändert somit findet das Script immer den "pid" von vagalume und das Problem ist behoben.
Die anderen Debug-Informationen sind von vagalume selber und entstehen bei mir auch ist aber nicht weiter tragisch.

WatchCat.sh (5.4 KiB)
Die Verbesserte Version von WatchCat
Download WatchCat.sh

Heinrich_Schwietering Team-Icon

Wikiteam
(Themenstarter)
Avatar von Heinrich_Schwietering

Anmeldungsdatum:
12. November 2005

Beiträge: 11325

Wohnort: Bremen

Hi!

Jo, jetzt funktioniert es! Danke 👍

Hab' die Zenity-Texte mal etwas informativer gestaltet; so weiß man gleich, was eingetragen werden kann.

Das Programm funktioniert natürlich nicht für alle Lastfm.Player, sondern nur die, die per Save-Song-Patch mit Temporärdatei arbeiten; die "Standard-Versionen" von Vagalume und Last-Exit lassen sich so nicht überwachen; auch TheLastRipper nicht; da wird der Song zunächst im Speicher abgelegt, um dann geschrieben zu werden.

so long
hank

WatchCat2.sh (5.7 KiB)
leicht modifizeirte Version
Download WatchCat2.sh

uvok89

Avatar von uvok89

Anmeldungsdatum:
14. Oktober 2007

Beiträge: 179

Weiß jemand, ob Last-Exit noch weiter entwickelt wird? Im SVN hat sich seit 6 Monaten nichts getan: http://svn.gnome.org/viewvc/last-exit/trunk/

evilware666

Avatar von evilware666

Anmeldungsdatum:
5. November 2006

Beiträge: 316

Wohnort: Ein Dorf in Dithschiländ ;-)

Moin Moin!

Leider bekomme ich das Skript nicht zum laufen. Ich poste mal wie ich das eingestellt habe, wäre nett wenn jemand mal ein Blick drauf werfen könnte. ☺

#!/bin/bash

###########################################################################################
###### Programm Informationen
###########################################################################################
# Name: WatchCat
# Zweck: Kontrollieren von vagalume
# Autor: David Linzberger, modifiziert von heinrich Schwietering
# Datum: 09.02.2009
# Version: v1.1a

###########################################################################################
###### Konstanten
###########################################################################################
# Mit Debug kann bestimmt werden ob Debug Informationen angezeit werden.
# Es stehen true=1 oder false=0 zur Auswahl
#
# Standardwert "1" 
Debug="1"

# Die folgenden Einstellungen sind nur Standardeinstellungen, welche helfen, das Programm
# schneller und einfacher zu bedienen. Während des Programmstarts müssen noch einmal
# alle Eingaben bestätigt werden. Es geht jedoch entschieden schneller, wenn hier richtige
# Standardwerte eingetragen werden.

# Mit StandardProgramm kann entschieden werden, welches Programm standardmäßig verwendet
# wird, damit die Eingabe im GUI nicht immer gemacht werden muss. Das Programm wurde für 
# vagalume geschrieben und auch getestet, aber es sollte kein Problem sein, auch 
# Last-Exit (mit Save-Song-Patch) damit zu überwachen.
#
# Standardwert "vagalume"
StandardProgramm="vagalume"

# Mit StandardLastFMUrl kann entschieden werden, welche LastFM Url standardmässig verwendet
# wird. Diese Standard Url erscheint im GUI und muss nicht immer eingegeben werden.
# Dabei gibt es u.a. folgende Url's
#	Meine Musiksammlung	->	lastfm://user/<LastFM-USER>/personal
#	Radiostation		->	lastfm://globaltags/<Radiostation>
#	Meine Playliste		->	lastfm://user/<LastFM-USER>/playlist/<NamePlaylist>
#	Artist			->	lastfm://artist/<NameArtist>
#	ändliche Artisten	->	lastfm://artist/<NameArtist>/similarartists
#
# Standardwert "lastfm://user/<LastFM-USER>/personal"
StandardLastFMUrl="lastfm://artist/<toto>/similarartists"

# Mit StandardFile kann entschieden werden, welche Datei überwacht werden sollte, damit
# entschieden werden kann, ob das Programm neu gestartet werden muss.
# Beispiel für vagalume:
#	/tmp/vagalume-<USER>
#
# Standardwert "/tmp/vagalume-<USER>"
StandardFile="/tmp/vagalume-evilware666"

# Mit StandardZeit kann entschieden werden, wie schnell das Kontrollintervall sei soll;
# dabei ist zu beachten, dass dieses Script auch eine gewisse, jedoch geringe, Leistung
# verbraucht. Deshalb sollte das Kontrollintervall nicht kleiner als 10 Sekunden
# gewählt werden.
#
# Standardwert "60"
StandardZeit="15"

#    <-- Ab hier sind normalerweise keine Änderungen mehr notwendig -->

###########################################################################################
###### Programm
###########################################################################################

Schlafe() {
    if [ $Debug == "1" ]; then echo "Debug - (WatchCat) [ $(date +%T) ] Warte $1 Sekunden lang."; fi
    sleep $1
}

Progstart() {
    $Programm $LastFMUrl &
    if [ $Debug == "1" ]; then echo "Debug - (WatchCat) [ $(date +%T) ] Starte $Programm"; fi
    Schlafe 10
    id=$(pidof $Programm)
    if [ $Debug == "1" ]; then echo "Debug - (WatchCat) [ $(date +%T) ] Programm id $id"; fi
}

ProgEnde() {
exit
}

Programm=$(zenity --entry \
                  --title "WatchCat"\
                  --text "Welches Programm soll überwacht werden?
Es können Vagalume/Vagalume oder Last-Exit (jeweils mit Save-Songpatch!) gewählt werden."\
                  --entry-text "$StandardProgramm")
if [ "$Programm" == "" ]; then ProgEnde; fi

LastFMUrl=$(zenity --entry \
                   --title "WatchCat"\
                   --text "Wie lautet die Url von LastFM?
Sie beginnt immer mit lastfm://"\
                   --entry-text "$StandardLastFMUrl")
if [ "$LastFMUrl" == "" ]; then ProgEnde; fi

FileToControl=$(zenity --entry \
                       --title "WatchCat"\
                       --text "Welche Datei soll überwacht werden?
Für Vagalume: /tmp/vagalume-<Lastfm-Benutzername>,
für Last-Exit:/tmp/lastfm-<Computer-Benutzername>"\
                       --entry-text "$StandardFile")
if [ "$FileToControl" == "" ]; then ProgEnde; fi

WarteZeit=$(zenity --entry \
                   --title "WatchCat"\
                   --text "Wie groß soll das Kontrollintervall (in Sekunden) sein?"\
                   --entry-text "$StandardZeit")
if [ $? != 0 ]; then ProgEnde; fi
if [ "$WarteZeit" == "" ]; then $WarteZeit=$StandardZeit; fi

zenity --question\
       --title "Information"\
       --text "\
               Programm: $Programm  \n\
               LastFM Url: $LastFMUrl \n\
               Datei: $FileToControl \n\
               Kontrollinterval: $WarteZeit sek"
if [[ $? != 0 ]] ; then ProgEnde; fi

id=$(pidof $Programm)
if [ "$id" == "" ]
then
	Progstart
else
	if [ $Debug == "1" ]; then echo "Debug - (WatchCat) [ $(date +%T) ] Programm existiert"; fi
	kill $id
	if [ $Debug == "1" ]; then echo "Debug - (WatchCat) [ $(date +%T) ] Programm mit ID:$id abgebrochen"; fi
	Schlafe 5
	Progstart
fi
DateiNichtGefunden=0
if [ $Debug == "1" ]; then echo "Debug - (WatchCat) [ $(date +%T) ] Endlosschlaufe"; fi
while true; do
	id=$(pidof $Programm)
	if [ "$id" == "" ]; then ProgEnde; fi
	if [ "$DateiNichtGefunden" == "1" ]; then
		if [ $Debug == "1" ]; then echo "Debug - (WatchCat) [ $(date +%T) ] $Programm beenden"; fi
		kill $id
		if [ $Debug == "1" ]; then echo "Debug - (WatchCat) [ $(date +%T) ] $Programm beendet"; fi
		Progstart
	fi
	Schlafe $WarteZeit
	if [ ! -f $FileToControl ]; then
		DateiNichtGefunden=1
	else
	 	DateiNichtGefunden=0
	fi
	if [ $Debug == "1" ]; then echo "Debug - (WatchCat) [ $(date +%T) ] Datei nicht gefunden $DateiNichtGefunden"; fi
done

Hab alle Varianten mit der Url-Einstellung durch aber nichts klappt. 😬

Eventuell weiss ja jemand was ich falsch eingestellt habe. ☺

P.S. Vagalume 0.7.1 ( natürlich mit Song Patch )

C.U. Evilware666 😈

evilware666

Avatar von evilware666

Anmeldungsdatum:
5. November 2006

Beiträge: 316

Wohnort: Ein Dorf in Dithschiländ ;-)

Moin Moin!

Hab es selber hin bekommen. 😀

Mein Fehler bestand darin, das ich den "Artist" immer zwischen die Pfeile gesetzt habe lastfm://artist/<toto>/similarartists aber genau darin bestand der Fehler, so lastfm://artist/toto/similarartists erst hab ich das Ganze zum laufen bekommen.

Aber Gut Ding will Weile habe. 😀

Gruss Evilware666 😈