Autor Thema: Modul: inotify - Überwachung von Dateiänderungen nach Pfad  (Gelesen 1287 mal)

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 18656
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #15 am: 15 Mai 2018, 09:58:34 »
Viele FHEM Anfaenger verwechseln globbing (das was man im Shell verwendet) mit regexp. Letzteres ist deutlich maechtiger, ist aber nicht kompatibel. * bedeutet im regexp "das letzte Zeichen beliebig oft" und nicht "irgendetwas beliebig oft". Deswegen fuehrt ein * am Anfang bei Regexp zu Fehlermeldung.

Offline marvin78

  • Hero Member
  • *****
  • Beiträge: 5130
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #16 am: 15 Mai 2018, 10:08:47 »
Danke für's Einspringen @Rudi.

Ich schaue mal, dass ich das an geeigneter Stelle abfange.

Offline marvin78

  • Hero Member
  • *****
  • Beiträge: 5130
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #17 am: 15 Mai 2018, 16:29:44 »
Die neue Version 0.4.7 kontrolliert auf einigermaßen korrekte Regex bei define und modify (kein * am Anfang). Außerdem werden im watch schon vorhandene fehlerhafte File-Regex nicht mehr verwendet. Es wird das komplette Verzeichnis überwacht. So kommt es an der Stelle nicht mehr zu FHEM Abstürzen.

Offline marvin78

  • Hero Member
  • *****
  • Beiträge: 5130
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #18 am: 10 Juli 2018, 13:32:10 »
Die neue Version 0.4.8 startet watch neu, wenn ein Unterordner hinzu kommt oder gelöscht wird und das Attribut subfolders auf 1 steht.

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2398
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #19 am: 10 Juli 2018, 19:26:47 »
Falls jemand die Debian Pakete wissen möchte:

sudo apt-get install liblinux-inotify2-perl
sudo apt-get install libdata-dump-perl
sudo apt-get install libfile-find-rule-perl

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Offline marvin78

  • Hero Member
  • *****
  • Beiträge: 5130
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #20 am: 11 Juli 2018, 08:33:56 »
Die habe ich mal in den ersten Post übernommen.

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2398
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #21 am: 11 Juli 2018, 20:25:51 »
Hallo,

ich habe das Modul jetzt auf meinem Testsystem (RPi, Stretch) laufen.

Internals:
   DEF        /tmp test.*
   FD         20
   FILES      test.*
   NAME       inotify
   NOTIFYDEV  global
   NR         65
   NTFY_ORDER 50-inotify
   PATH       /tmp
   STATE      active
   TYPE       inotify
   VERSION    0.4.8
   READINGS:
     2018-07-11 20:15:04   state           active
   helper:
     dirs:
       /tmp
     masks:
       IN_ALL_EVENTS
Attributes:
   mask       IN_ALL_EVENTS
   room       System
   verbose    5

Wenn ich nun eine Datei test.txt nach /tmp kopieren erhalte ich folgende Log Infos:
2018.07.11 20:15:04 3: inotify (inotify): set Device active
2018.07.11 20:15:05 3: inotify (inotify): startet watching /tmp with the file pattern test.*
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp/test.txt
2018.07.11 20:15:33 5: inotify (inotify): got $VAR1 = bless( {
                 'mask' => 256,
                 'w' => bless( {
                                 'wd' => 1,
                                 'cb' => sub { "DUMMY" },
                                 'name' => '/tmp',
                                 'inotify' => bless( {
                                                       'ignore' => {},
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 20
                                                     }, 'Linux::Inotify2' ),
                                 'mask' => 4095
                               }, 'Linux::Inotify2::Watch' ),
                 'wd' => 1,
                 'cookie' => 0,
                 'name' => 'test.txt'
               }, 'Linux::Inotify2::Event' );

2018.07.11 20:15:33 4: inotify (inotify): event is not matching any configured mask: IN_CREATE
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp/test.txt
2018.07.11 20:15:33 5: inotify (inotify): got $VAR1 = bless( {
                 'wd' => 1,
                 'cookie' => 0,
                 'name' => 'test.txt',
                 'w' => bless( {
                                 'wd' => 1,
                                 'cb' => sub { "DUMMY" },
                                 'name' => '/tmp',
                                 'inotify' => bless( {
                                                       'ignore' => {},
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 20
                                                     }, 'Linux::Inotify2' ),
                                 'mask' => 4095
                               }, 'Linux::Inotify2::Watch' ),
                 'mask' => 32
               }, 'Linux::Inotify2::Event' );

2018.07.11 20:15:33 4: inotify (inotify): event is not matching any configured mask: IN_OPEN
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp/test.txt
2018.07.11 20:15:33 5: inotify (inotify): got $VAR1 = bless( {
                 'w' => bless( {
                                 'wd' => 1,
                                 'cb' => sub { "DUMMY" },
                                 'name' => '/tmp',
                                 'inotify' => bless( {
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 20,
                                                       'ignore' => {}
                                                     }, 'Linux::Inotify2' ),
                                 'mask' => 4095
                               }, 'Linux::Inotify2::Watch' ),
                 'mask' => 2,
                 'wd' => 1,
                 'name' => 'test.txt',
                 'cookie' => 0
               }, 'Linux::Inotify2::Event' );

2018.07.11 20:15:33 4: inotify (inotify): event is not matching any configured mask: IN_MODIFY
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp/test.txt
2018.07.11 20:15:33 5: inotify (inotify): got $VAR1 = bless( {
                 'w' => bless( {
                                 'wd' => 1,
                                 'cb' => sub { "DUMMY" },
                                 'name' => '/tmp',
                                 'inotify' => bless( {
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 20,
                                                       'ignore' => {}
                                                     }, 'Linux::Inotify2' ),
                                 'mask' => 4095
                               }, 'Linux::Inotify2::Watch' ),
                 'mask' => 8,
                 'cookie' => 0,
                 'name' => 'test.txt',
                 'wd' => 1
               }, 'Linux::Inotify2::Event' );

2018.07.11 20:15:33 4: inotify (inotify): event is not matching any configured mask: IN_CLOSE_WRITE
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp/test.txt
2018.07.11 20:15:33 5: inotify (inotify): got $VAR1 = bless( {
                 'mask' => 4,
                 'w' => bless( {
                                 'wd' => 1,
                                 'cb' => sub { "DUMMY" },
                                 'name' => '/tmp',
                                 'inotify' => bless( {
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 20,
                                                       'ignore' => {}
                                                     }, 'Linux::Inotify2' ),
                                 'mask' => 4095
                               }, 'Linux::Inotify2::Watch' ),
                 'wd' => 1,
                 'name' => 'test.txt',
                 'cookie' => 0
               }, 'Linux::Inotify2::Event' );

2018.07.11 20:15:33 4: inotify (inotify): event is not matching any configured mask: IN_ATTRIB
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp

Und es wird weder ein Reading gesetzt noch ein Event ausgelöst.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Offline marvin78

  • Hero Member
  • *****
  • Beiträge: 5130
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #22 am: 11 Juli 2018, 21:13:27 »
Funktioniert es, wenn du andere Masks verwendest (bspw. IN_CREATE)?

Probier mal die neue Version 0.4.9. IN_ALL_EVENTS wurde bisher nicht berücksichtigt, das es das entsprechende Event nicht wirklich gibt.
« Letzte Änderung: 11 Juli 2018, 21:19:18 von marvin78 »

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2398
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #23 am: 12 Juli 2018, 19:06:21 »
Funktioniert es, wenn du andere Masks verwendest (bspw. IN_CREATE)?

Probier mal die neue Version 0.4.9. IN_ALL_EVENTS wurde bisher nicht berücksichtigt, das es das entsprechende Event nicht wirklich gibt.

Danke, funktioniert.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

 

decade-submarginal