You are not logged in.

Dear visitor, welcome to VDR Portal. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Friday, December 23rd 2011, 9:24pm

Auf Syslog-Eintrag reagieren

Ich habe mit meiner Cine S2 V5.5 immer mal wieder das Problem:

Source code

1
2
3
4
5
ngene: Command timeout cmd=04 prev=04
Dec 23 20:22:38 htpc kernel: [28708.088044] host_to_ngene (c000): 0d d3 f6 e9 8f 7b d3 7b
Dec 23 20:22:38 htpc kernel: [28708.088047] ngene_to_host (c100): 01 fc 7e e7 f7 93 2d 2b
Dec 23 20:22:38 htpc kernel: [28708.088050] dev->hosttongene (ffff880084cfc000): 04 04 d0 f1 2b fb 00 01
Dec 23 20:22:38 htpc kernel: [28708.088052] dev->ngenetohost (ffff880084cfc100): 00 00 00 00 00 00 00 00


Wenn das passiert reicht es den VDR zu beenden, den ngene Treiber neu zu laden und den VDR wieder zu starten. Wenn ich selber vorm TV sitze mache ich das per lircrc-Script. Manchmal tritt das Problem aber leider auch auf, wenn der VDR automatisch für eine Aufnahme gestartet wurde. Wie kann ich in dem Fall mein "Repair-Script" ausführen? Gibt es eine Möglichkeit auf die Einträge im Syslog zu reagieren? Per Cronjob? Hat jemand genau das zufällig schonmal gemacht und kann mir seinen Cronjob zur Verfügung stellen? Würde mich sehr freuen :)

2

Friday, December 23rd 2011, 9:36pm

Gibt es eine Möglichkeit auf die Einträge im Syslog zu reagieren?

Schau dir mal die Doku zu deinem Syslog Daemon an. Z.B. rsyslog: http://rsyslog.com/doc/rsyslog_conf_actions.html (Shell Execute)

Kommentare dazu kaputte Hardware/Treiber zu nutzen spare ich mir jetzt ;)

cu

Mein VDR

Mein VDR
Digitainer2xBouget DVB-SDebian Squeeze (Kernel 2.6.35.3 von kernel.org)Softdevice Ausgabepluginvdr 1.6.0-3 (Extensions Patch 72) und viele Plugins von SourceMedion X10 FernbedienungSDC-Megtron Display (240x128x1) mit GraphLCD-PluginFreevo 1.9.0
Vodcatcher Helper in ein freundliches DEB verpackt, Tester Willkommen: http://dl.dropbox.com/s/705bh6ydgisfrqu/index.htmlFingerprint: 8A104A00D5031773A9F72A19BAEE135EA7860149

3

Friday, December 23rd 2011, 9:41pm

Danke, schau ich mir mal an.
Kommentare dazu kaputte Hardware/Treiber zu nutzen spare ich mir jetzt ;)
Was soll ich machen? Am Treiber kann ich nichts ändern und unproblematischere (Budget DVBS2-) TV Karten scheint es ja auch eher nicht zu geben. Bin ja schon froh, dass sie ansonsten zuverlässig funktioniert...

4

Friday, December 23rd 2011, 10:14pm

BTW: Das Dynamite Plugin bietet die Möglichkeit dem VDR zur Laufzeit ein DVB Device zu entziehen und (nach dem Treiberneustart) wieder anzubinden, damit könntest du dir den VDR Neustart sparen.

Was soll ich machen? Am Treiber kann ich nichts ändern und unproblematischere (Budget DVBS2-) TV Karten scheint es ja auch eher nicht zu geben. Bin ja schon froh, dass sie ansonsten zuverlässig funktioniert...


War auch nicht unbedingt ein Vorwurf an dich (bei DVB und Linux ist aktuell alles ziemlich müllig), nur ist sowas generell Bastelei und eigentlich nix womit man auf Dauer glücklich ist. Und ich fühlte mich gezungen das mal zu erwähnen ;)


Keine Ahnung wo der Treiber für deine Karte herkommt (diese Situation ist auch aktuell ziemlich blöd bei Linux, wo es die Treiber gibt wissen nur Insider), aber es könnte mal lohnen neuere/ältere Versionen zu probieren oder zu schauen obs irgendwo nen Patch (es gibt viele Patches für Problemlösungen die es aus irgendwelchen Gründen nie bis in den Upstream schaffen) für dein Problem gibt.

cu

Mein VDR

Mein VDR
Digitainer2xBouget DVB-SDebian Squeeze (Kernel 2.6.35.3 von kernel.org)Softdevice Ausgabepluginvdr 1.6.0-3 (Extensions Patch 72) und viele Plugins von SourceMedion X10 FernbedienungSDC-Megtron Display (240x128x1) mit GraphLCD-PluginFreevo 1.9.0
Vodcatcher Helper in ein freundliches DEB verpackt, Tester Willkommen: http://dl.dropbox.com/s/705bh6ydgisfrqu/index.htmlFingerprint: 8A104A00D5031773A9F72A19BAEE135EA7860149

5

Friday, December 23rd 2011, 11:13pm

So, mit rsyslog ein Script ausführen ist ja tatsächlich kein Problem. Leider wird das Script natürlich als syslog-User ausgeführt unter dem ich natürlich nichts darf. sudo (mit NOPASSWD für mein Script) scheint für syslog auch nicht zu funktionieren und wäre Sicherheitstechnisch wohl auch keine gute Idee ;)
BTW: Das Dynamite Plugin bietet die Möglichkeit dem VDR zur Laufzeit ein DVB Device zu entziehen und (nach dem Treiberneustart) wieder anzubinden, damit könntest du dir den VDR Neustart sparen.
Gute Idee. Werd ich mir auch mal anschauen. Ist aber nicht ganz so wichtig, der Fehler tritt ja immer nur direkt nach dem Boot bzw. nach dem Aufwachen aus dem Standby auf. Da ist ein VDR-Neustart schon ok.
War auch nicht unbedingt ein Vorwurf an dich (bei DVB und Linux ist aktuell alles ziemlich müllig), nur ist sowas generell Bastelei und eigentlich nix womit man auf Dauer glücklich ist. Und ich fühlte mich gezungen das mal zu erwähnen ;)


Keine Ahnung wo der Treiber für deine Karte herkommt (diese Situation ist auch aktuell ziemlich blöd bei Linux, wo es die Treiber gibt wissen nur Insider), aber es könnte mal lohnen neuere/ältere Versionen zu probieren oder zu schauen obs irgendwo nen Patch (es gibt viele Patches für Problemlösungen die es aus irgendwelchen Gründen nie bis in den Upstream schaffen) für dein Problem gibt.

cu
Stimmt schon. Ich benutze momentan die dkms-Version von yavdr die im Gegensatz zum Standard-Kerneltreiber (der auch das "command timeout" Problem hat) immerhin eine korrekte femon-Signalanzeige bietet.

6

Friday, December 23rd 2011, 11:21pm

So, mit rsyslog ein Script ausführen ist ja tatsächlich kein Problem. Leider wird das Script natürlich als syslog-User ausgeführt unter dem ich natürlich nichts darf.


Das was du per Syslog aufrufst sollte eh nix tun ausser per "at now" (das ist dann vom Syslogprozess entkoppelt) das richtige Script zu starten. Jedenfalls wenn ich die Kommentare dort richtig lese.

Gibts hier (at) auch Rechteprobleme dann würde ich ein kleines Stub Programm *) (Shell Script und setuid geht nicht) nutzen was per http://de.wikipedia.org/wiki/Setuid mit root Rechten gestartet wird und die Aktionen (ohne Auswertung irgendwelcher Kommandozeilenparameter, dann gibts hier auch keine Sicherheitsprobleme) ausführt.

cu

*) Das tuts schon

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// übersetzen mit
// gcc -o reload-stub reload-stub.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <grp.h>
#include <pwd.h>
#include <errno.h>
typedef enum {false,true} bool;
int main()
{
  int ret;
  // "ls -l /" ist der Shellbefehl, es geht auch "ls -l /; rm /test.txt"
  ret=system("ls -l /");
  return ret;
}

Mein VDR

Mein VDR
Digitainer2xBouget DVB-SDebian Squeeze (Kernel 2.6.35.3 von kernel.org)Softdevice Ausgabepluginvdr 1.6.0-3 (Extensions Patch 72) und viele Plugins von SourceMedion X10 FernbedienungSDC-Megtron Display (240x128x1) mit GraphLCD-PluginFreevo 1.9.0
Vodcatcher Helper in ein freundliches DEB verpackt, Tester Willkommen: http://dl.dropbox.com/s/705bh6ydgisfrqu/index.htmlFingerprint: 8A104A00D5031773A9F72A19BAEE135EA7860149

This post has been edited 1 times, last edit by "Keine_Ahnung" (Dec 23rd 2011, 11:28pm)


mark05

Intermediate

Posts: 352

Location: Köln

  • Send private message

7

Friday, December 23rd 2011, 11:33pm

hi

logfmon

http://sourceforge.net/projects/logfmon/


das ist ein tool welches logfiles nach configurierbaren kriterien ueberwacht und dann ein event ( z.b. befehl oder script ) ausloesen kann.
VDR1 : core2duo 3.2 Ghz , 1GB Ram , 2x TT 1501 DVB-C 1 GB HD , Asus EN 210 Silent , Debian Squeeze 64bit + e-tobi Pakete
VDR2 : 1.2 Ghz P3 , Digitainer 768 MB Ram , yavdr 0.3a 32 bit

8

Saturday, December 24th 2011, 2:52pm

Ich habe mal einen Script-Daemon zur Mail-Log Auswertung geschrieben, das über einen FIFO-Puffer lief. Das ist eine recht elegante Methode, weil man sich nur um das kümmert was gerade geschrieben wurde, und nicht das ganze File Parsen muss.

Erstmal braucht man einen FIFO-Puffer, das geht recht simpel mit:

Source code

1
mkfifo /var/log/kern.fifo


Diese Spezialdatei bleibt, muß also nur einmal angelegt werden. Als nächstes kümmert man sich um das füllen dieses Puffers. Ich nehme mal an du willst Kernal-Einträge. Dann erweitere die /etc/syslog.conf um die Zeile:

Source code

1
kern.*    |/var/log/kern.fifo


Danach den syslog-Daemon neu starten. Jetzt werden alle Kernal-Nachrichten in den Puffer kopiert und können ganz normal ausgelesen werden. Ich habe das damals mit einem Perl-Daemon gemacht. Hier mal das Grundgerüst dazu:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/perl

# the buffer
our $buffer = "/var/log/kern.fifo";

# global variables/objects
our $abort = 0;

# run main
Main();

######################################################
# we care signals

sub SignalCatcher
{
  $abort = 1;
}

#######################################################
# Parse FIFO
sub ParseStdin
{
  open (BUFFER, $buffer);
  while (<BUFFER>)
  {
    print $_;
    if ($abort==1) {last;}
    ...
  }
  close(BUFFER);
}
#######################################################
# Main Sub

sub Main
{
  $SIG{TERM} = \&SignalCatcher;
  ...
  ParseStdin();
  ...
}


Diese Methode hat fast keine CPU-Last und verliert auch keine Log-Lines wenn der Daemon mal wegen Fehlern abgebrochen wurde.
Hardware: Point of View ION/ATOM330, 2GB, 160GB (Lokal), 2TB über NFS, Hauppauge Nova-T Stick (2040:7070), SoundGraph IMON (15c2:0036 VFD)
System: Debian Squeeze, Kernel 3.1.2 (self build), Nvidia 285.05.09, lcdproc 0.5.5, lirc 0.9.0
VDR: vdr 1.7.21 (etobi) + xvdr (git), xineliboutput, markad
XBMC: opdenkamp PVR branch (git)

9

Sunday, December 25th 2011, 4:25pm

Danke für die Ideen :)
Muss mal schauen was am Besten funktioniert.
Spricht eigentlich was gegen ein tail -f auf Syslog? Also z.B. tail -n 1 -f /var/log/syslog | awk '$0 ~/ngene: Command timeout/ { system(sudo -i "/usr/bin/vdrrepair") }'

10

Sunday, December 25th 2011, 4:28pm

Spricht eigentlich was gegen ein tail -f auf Syslog?


Ja, das ist Murks ;) rsyslog verarbeit und Matcht eh jede Syslog Nachricht, da bietet es sich an das rsyslog in bestimmten Fällen gleich die passenden Programme startet. Ein ständiges Pollen per "tail -f" ist da rein technsich sehr blödsinnig.

Alles IMHO natürlich.

cu

Mein VDR

Mein VDR
Digitainer2xBouget DVB-SDebian Squeeze (Kernel 2.6.35.3 von kernel.org)Softdevice Ausgabepluginvdr 1.6.0-3 (Extensions Patch 72) und viele Plugins von SourceMedion X10 FernbedienungSDC-Megtron Display (240x128x1) mit GraphLCD-PluginFreevo 1.9.0
Vodcatcher Helper in ein freundliches DEB verpackt, Tester Willkommen: http://dl.dropbox.com/s/705bh6ydgisfrqu/index.htmlFingerprint: 8A104A00D5031773A9F72A19BAEE135EA7860149

11

Monday, December 26th 2011, 10:36am

ok, ich habs nun per rsyslog, at und sudo hinbekommen. Das Script wird zwar drei mal nacheinander ausgeführt aber funktioniert jedenfalls.
Bei den Tests um das Problem zu reproduzieren habe ich dann aber wohl vermutlich den eigentlichen Grund für den Fehler gefunden: Wenn der VDR irgendwie beim suspend hängt, kann der Treiber nicht entladen und nach dem Resume daher auch nicht neu geladen werden. Und genau in dem Fall treten die Fehler auf. Wenns der VDR ist kann ich den vorm Standby ja notfalls nochmal killen, aber was wenn es irgend etwas anderes ist? Reproduzieren kann ich das z.B. indem ich femon laufen lasse während ich in den Standby fahre.