Timestamp abfrage als Cronjob

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von hihachi, 19.12.2006.

  1. #1 hihachi, 19.12.2006
    hihachi

    hihachi Grünschnabel

    Dabei seit:
    19.12.2006
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo,

    ich habe die notwendigkeit via Cronjob (alle 15-30 Minuten) eine Datei zu überprüfen, ob diese älter als 5 Minuten ist.

    Sollte diese Datei älter als 5 Minuten sein, so soll eine Mail an eine Adresse (info@irgendwas.de) gehen, mit der Mail "Datei wurde nicht neu generiert" oder sowas ähnliches..

    Kann mir da irgendwer helfen?

    Ich hab null Ahnung..

    Gruss,

    Matze
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 19.12.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Wo ist denn dein Problem?
    Cronjob einrichten?
    ctime der Datei ermitteln?
    ???
    Schreib mal genauer, was du versucht hast, und was du nicht hinbekommst.

    Ach ja, und welche Shell du nutzt!

    Gruß Wolfgang
     
  4. #3 hihachi, 19.12.2006
    hihachi

    hihachi Grünschnabel

    Dabei seit:
    19.12.2006
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo Wolfgang,



    es soll ein Cronjob sein, der eine bestimmte Datei auf ctime überprüft.
    Sollte dieses älter als 5 Minuten sein, so soll eine Mail rausgehen.
    Gleichzeitig soll eine Lock-Datei erstellt werden, damit beim nächsten Crondurchlauf und dem nichtbehebens des Problems nicht wieder eine Mail geschickt wird, diese auch abgefragt werden.
    Sprich:

    1. Abfrage ob Lockdatei vorhanden
    2. Wenn Lockdatei älter als 4h Lockdatei löschen
    3. Falls Lockdatei noch vorhanden, Skript beenden
    4. Falls nicht vorhanden, angegebene Datei auf alter überprüfen
    5. Falls Datei innerhalb von 5 Minuten erstellt, nichts machen und skript beenden.
    6. Falls Datei älter als 5 Minuten, Mail verschicken, Lockdatei erstellen.

    Ich nutze die Bash als Shell..

    ich bekomm da irgendwie rein gar nichts hin..
    was daran liegen kann, dass mein Kopf dicht is..und mir absolut nichts einfällt.. :(

    Sorry, wenn das Problem zu einfach ist..

    Gruss,

    Matze
     
  5. #4 Wolfgang, 19.12.2006
    Zuletzt bearbeitet: 19.12.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    1. Zu 1:
      Code:
      if [  -e $DATEI ];
      then 
      echo $DATEI existiert;
      else
       echo $DATEI existiert nicht;
      fi
    2. zu 2:
      Code:
      DATEI=deine_lock_datei 
      TNOW=$(date "+%s");
      TDATEI=$(stat -c %Z $DATEI);
       ALTER=$(($TNOW - $TDAEI));
      if  [ $ALTER -gt 14400 ];
      then 
      echo "Älter als 4 Sttunden";
      else
      echo "Weniger als 14400 Sekunden";
      #entspricht 4 Stunden
      fi
      
    3. zu 3:
      Code:
      ] if [ -e $LOCKDATEI ] && [ $ALTER -lt 14400 ];
      then
      exit;
      fi
    4. 4..5
      siehe Punkt 1..3
    5. zu 6:
      man mail oder du nutzt die Tatsache, dass per cronjob alle Ausgaben an einen user gesendet werden.

    Datei erstellen: touch
    Datei löschen : rm

    Gruß Wolfgang
     
  6. #5 hihachi, 19.12.2006
    hihachi

    hihachi Grünschnabel

    Dabei seit:
    19.12.2006
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo,

    zunächst einmal schonmal Danke für die Hilfe..

    Das hier ist mein, leider nicht funktionierender, Code:

    Code:
    
    #!/bin/bash
    #Variablenzuordnung
    Datei=test.txt
    Lockdatei='/tmp/Lockdatei.lock'
    TNOW=$(date "+%s");
    TDATEI=$(stat -c %Z $Datei);
    TLOCKDATEI=$(stat -c %Z $Lockdatei);
    DATEIALTER=$(($TNOW - TDATEI));
    LOCKDATEIALTER=$(($TNOW - TLOCKDATEI));
    
    
    if [  -e $Lockdatei ];
     then
     if [ $LOCKDATEIALTER -gt 14400];
       then
        rm $Lockdatei;
       exit;
      else
       exit;
     fi
    else
    if [  -e $Datei ];
    then
    if  [ $ALTER -gt 300 ];
    then
    echo "Älter als 5 Minuten";
    touch $Lockdatei;
    else
    exit;
    fi
    else
     echo $Datei existiert nicht;
    fi
    
    
    
    Vielleicht kann mir wer sagen, wie ich Dateipfade und -Namen als Variablen definieren muss, damit es wirklich funzt..

    Gruss,

    Matze
     
  7. #6 Wolfgang, 19.12.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ja klar ich habe wieder meine Fiptehler drin. ;)
    Schlaubieee hilf *g*
    Mach mal aus:
    Code:
    DATEIALTER=$(($TNOW - TDATEI));
    LOCKDATEIALTER=$(($TNOW - TLOCKDATEI));
    
    
    
    folgendes
    Code:
    DATEIALTER=$(($TNOW - [b]$[/b]TDATEI));
    LOCKDATEIALTER=$(($TNOW - [b]$[/b]TLOCKDATEI));
    
    Code:
    if [  -e $Lockdatei ];
     then
              if [ $LOCKDATEIALTER -gt 14400];
              then
                rm $Lockdatei;
                exit;
              fi
    else
       exit;
     fi
    
    if [  -e $Datei ];
    then
         if  [ $ALTER -gt 300 ];
          then
          echo "Älter als 5 Minuten";
          touch $Lockdatei;
           else 
           echo "datei existiert, ist aber nicht älter als 5 min"
          fi
    fi
    
    echo $Datei existiert nicht;
    
    
    Deine Verschachtelten Abfragen sind fehlerhaft.
    versuch es mal so... ;)
    Gruß Wolfgang
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 hihachi, 19.12.2006
    hihachi

    hihachi Grünschnabel

    Dabei seit:
    19.12.2006
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo Wolfgang,

    danke für die Hilfe..

    hier mein funktionierender Code:

    Code:
    
    #!/bin/bash
    #Variablenzuordnung
    Datei=/data/datei
    Lockdatei=/tmp/Lockdatei.lock
    MAILTEXT1="Achtung!!!"
    EMAILADRESSE="mail-addy@domain.com"
    
    
    TNOW=$(date "+%s");
    
    
    if [  -e $Lockdatei ];
     then
              TNOW=$(date "+%s");
              TLOCKDATEI=$(stat -c %Z $Lockdatei);
              LOCKDATEIALTER=$(($TNOW - $TLOCKDATEI));
              if [ $LOCKDATEIALTER -gt 14400 ];
              then
                rm $Lockdatei;
                exit;
              else
                exit;
              fi
    else
       echo "Lockdatei existiert nicht";
       # exit;
     fi
    
    if [  -e $Datei ];
    then
          TDATEI=$(stat -c %Z $Datei);
          TNOW=$(date "+%s");
          DATEIALTER=$(($TNOW - $TDATEI));
          if  [ $DATEIALTER -gt 300 ];
          then
            echo $MAILTEXT1 | mail -s 'Script offline' $EMAILADRESSE
            echo "Älter als "$DATEIALTER "Sekunden";
            touch $Lockdatei;
           else
           echo "datei: "$Datei" existiert, ist aber nicht älter als 5 min"
           echo "Alter:" $DATEIALTER "Sekunden";
          fi
    else
    
    echo $Datei existiert nicht;
    
    fi
    
    
    Mein cronjob-Eintrag sieht wie folgt aus:

    Code:
    */10 * * * *    /usr/local/scripts/check.sh
    
    Jetzt läuft das Skript auch schön alle 10 Minuten..nur, es erscheint jedesmal eine Mail mit den echo-Ausgaben.
    Wenn ich diese aber lösche, läuft das Skript nicht mehr.

    Hast Du eine Idee was ich machen muss, damit nur eine Mail rausgeht, wenn wirklich die Datei älter als 5 Minuten ist. Also ansonsten soll gar nichts eingehen.

    Danke für die Hilfe

    Matze
     
  10. #8 Schlaubi_fi.de, 19.12.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    hehehe :devil:


    @ hihachi
    Der Cron verschickt nur bei Output eine Mail. Hast Du das Skript mal in der Shell laufen lassen (verschiedenen Zustände getestet, bewusst und mit Absicht in einen Fehler laufen lassen, um zu sehen ob es auch im Fehlerfall tut was Du willst?)?
     
Thema:

Timestamp abfrage als Cronjob

Die Seite wird geladen...

Timestamp abfrage als Cronjob - Ähnliche Themen

  1. Timestamp an Inhalt einer Textdatei anfügen

    Timestamp an Inhalt einer Textdatei anfügen: Hallo, ich als neuer, unerfahrener Nutzer von Linux und der bash hätte folgende Frage. Und zwar würde ich gerne mit einem command den Zeitstempel...
  2. FFMPEG none monotone timestamps

    FFMPEG none monotone timestamps: Hallo, also hier steht jetzt seit kurzem ein neuer Fernseher inkl. Netzwerk/UPNP. :)) Leider ließt der meine VDR Aufnahmen erst, nachdem die...
  3. Datumsumrechnung des morgigen Tages mittels Timestamp

    Datumsumrechnung des morgigen Tages mittels Timestamp: Hi, also ich würde gern Timestamps erstellen. Das klappt soweit ganz gut, zumindest für den aktuellen Tag: $nToday = mktime(0, 0, 0, date("m") ,...
  4. Timestamp in lesbares Datum konvertieren

    Timestamp in lesbares Datum konvertieren: Hallo! Ich bräuchte einen Algorithmus und/oder eine Funktion, die es mir ermöglicht einen Zeitstempel (seit 1.1.1900) auf die aktuelle Zeit zu...
  5. am timestamp erkennen ob schaltjahr ist

    am timestamp erkennen ob schaltjahr ist: erstma, ich weiß net so ob das hier reinpasst, aber es handelt sich ja um UNIX-timestamps und als katergorien-name stand da auch "UNIX und...