Timestamp abfrage als Cronjob

H

hihachi

Grünschnabel
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
 
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
 
Hallo Wolfgang,


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


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
 
Hallo

Hallo Wolfgang,



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..
  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
 
Zuletzt bearbeitet:
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
 
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
 
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
 
Ja klar ich habe wieder meine Fiptehler drin. ;)
Schlaubieee hilf *g*
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?)?
 

Ähnliche Themen

Maskiertes Suchen, Ersetzen und Rechnen in access.log vor weitere Bearbeitung

Windows clients können nicht mehr auf lange laufendes System zugreifen

die 5 aktuellesten Datein im Verzeihnis suchen

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

Probleme bei DDNS mit Bind9 und Dhcp3 Server

Zurück
Oben