Flo: Alarm auslösen / scharfstellen

Hi!
Habe auf meinem Server eine Datei, die von einem PHP-Script per Cronjob aller halben Stunde auf die letzte Dateiänderung geprüft wird. Falls die Änderung länger als eine halbe Stunde zurückliegt, wird automatisch eine Mail ("Alarm") versendet. Das Problem ist nun, dass ich jetzt jedes mal eine Mail bekomme, wenn die Datei nicht mehr aktuell ist. -  So soll es ja auch sein

ABER: Um das Problem an dem Computer zu beheben (Was die Inaktuallität der Datei hervorgerufen hat) wo es aufgetreten ist, braucht es seine Zeit (langer Weg bis zum betroffenen Computer)

Soll heißen: Ich bekomme immer immer immer wieder die Mail aller halben Stunde, obwohl ich ja nun mittlerweile weiß, dass es Alarm gibt.

Wie könnte ich es lösen, dass ich den Alarm zwischenzeitlich abstellen kann, also besser: der Alarm ( und damit das Script ) selber erst wieder von mir aktiviert werden muss??

Eine Vorüberlegung: in einer MySQL-Datenbank einen Wert ändern, der das Script verhindert nach dem ersten Versenden weitere Mails zu versenden, bis ich (durch bspw. ein weiteres Script) den Wert wieder so umändere, dass der Alarm wieder scharfgestellt ist.

Was haltet ihr davon?

Freue mich auf eure Antworten!

Gruß Flo

  1. Hallo

    Habe auf meinem Server eine Datei, die von einem PHP-Script per Cronjob aller halben Stunde auf die letzte Dateiänderung geprüft wird. Falls die Änderung länger als eine halbe Stunde zurückliegt, wird automatisch eine Mail ("Alarm") versendet. Das Problem ist nun, dass ich jetzt jedes mal eine Mail bekomme, wenn die Datei nicht mehr aktuell ist. -  So soll es ja auch sein

    Wie könnte ich es lösen, dass ich den Alarm zwischenzeitlich abstellen kann, also besser: der Alarm ( und damit das Script ) selber erst wieder von mir aktiviert werden muss??

    Welches Intervall gilt für diesen Cronjob? Halbe Stunde oder kürzer? Dann löse den Alarm nicht aus, wenn die letzte Dateiänderung mehr als eine Stunde her ist.

    Eine Vorüberlegung: in einer MySQL-Datenbank einen Wert ändern, der das Script verhindert nach dem ersten Versenden weitere Mails zu versenden, bis ich (durch bspw. ein weiteres Script) den Wert wieder so umändere, dass der Alarm wieder scharfgestellt ist.

    Was haltet ihr davon?

    Overkill! Das Anlegen einer 0-Byte-Datei mittels touch und Prüfen der Existenz dieser Datei wäre z.B. völlig ausreichend. Sorge dafür, dass bei Änderung der Datei die Prüfdatei gelöscht wird.

    Freundliche Grüße

    Vinzenz

  2. Hallöchen,

    Eine Vorüberlegung: in einer MySQL-Datenbank einen Wert ändern, der das Script verhindert nach dem ersten Versenden weitere Mails zu versenden...

    ... dürfte der sinnvollste Ansatz sein. Z.B. ein Wert "Alarm aktiv" mit normalerweise false.

    Das Cronjob - Script dann in der Art ändern:

    if ((älter als...) && (! Alarm aktiv)) {  // erstmaliges Auftreten des Problems
      Mail senden;
      Alarm aktiv = true;
    }

    und um eine zweite Abfrage erweitern:

    if((Alarm aktiv) && (jünger als)) {  // also alles wieder OK
      Alarm aktiv = false;
    }

    MfG
    vaudi

    1. echo $begrüßung;

      Eine Vorüberlegung: in einer MySQL-Datenbank einen Wert ändern, der das Script verhindert nach dem ersten Versenden weitere Mails zu versenden...

      ... dürfte der sinnvollste Ansatz sein. Z.B. ein Wert "Alarm aktiv" mit normalerweise false.

      Bist du sicher, dass es sinnvoll ist, das komplette Datenbankhandling durchzuführen statt file_exists(), touch() und gegebenenfalls noch unlink()? Die Datenbank-Lösung würde ich nur dann nehmen, wenn sowieso eine Datenbankabfrage für den Vorgang erforderlich ist.

      Die Existenz einer Datei kann man übrigens auch im Shellscript recht einfach feststellen, Anlegen ebenfalls.

      echo "$verabschiedung $name";

      1. Hallöchen,

        ...wenn sowieso eine Datenbankabfrage für den Vorgang erforderlich ist.

        Davon bin ich ausgegangen.

        Ansonsten würde ich 00mer Vorschlag von Vinzenz zustimmen:

        Dann löse den Alarm nicht aus, wenn die letzte Dateiänderung mehr als eine Stunde her ist.

        bzw. relativiert: Löse den Alarm nur aus, wenn die letzte Änderung
          ((länger 1 Prüfungsintervall) && (kürzer als 2 Prüfungsintervalle))
        zurückliegt.

        Das würde nach meinem Verständnis
          a) Versenden im Alarmfall
          b) einmaliges Versenden und
          c) Zurücksetzen des Alarms
        in Einem abdecken, ohne irgend welche Variablenmanipulationen oder Schreiben / Löschen von Dateien.

        MfG
        vaudi

  3. Hi!

    Ich danke euch allen  vielmals für die Tips!
    Jetzt klappt es so wie ich es möchte! :-)

    THX!
    Flo