• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]Schleife die das Erstelldatum einer Datei überprüft?

revealed

Guru
Hallo!

Ich bräuchte bitte Hilfe mit folgender SH:
cat /srv/www/htdocs/htdocsback.sh
:
Code:
#! /bin/sh
# sichert alle Dateien im Verzeichnis htdocs!
#
tar -cf /srv/www/htdocs/htdocs_back.tar /srv/www/htdocs/*
# <- um Inhalte wieder anzuzeigen!
#
# tar -tvf /srv/www/htdocs/htdocs_back.tar
#
# kopiert das Backup auf die FAT32 Partition:
cp /srv/www/htdocs/htdocs_back.tar /windows/E/cron_backup/
# Entfernt das Archiv aus dem Arbeitsverzeichnis.
rm /srv/www/htdocs/htdocs_back.tar --verbose
echo Saving htdocs [OK]
# EOF

Ich möchte diese um eine Schleife (Abfrage) erweitern. Damit ich die Ausgabe weiterverwenden kann.

Diese sollte möglichst folgendes tun:

Code:
#! /bin/bash
# was ich brauche währe das mit dem jeweils heutigen Datum:
if [ /pfad/zurZu/Prüfenden/Datei hat heutiges Datum?" ]; then 
 echo [OK]
 else echo [error] See comments in file!
fi

exit 0

Kann mir bitte jemand helfen das mit dem heutigen Datum zu Lösen? Also jedes mal wenn der Script läuft soll er sagen ob die Datei von Heute ist? Ja/Nein.

vielen Dank!

Gruß

R
 
OP
revealed

revealed

Guru
könnte man dazu eventuell die Ausgabe von:

Code:
date
So 16. Dez 22:13:40 CET 2007
und
Code:
ls -l /windows/E/cron_backup/htdocs_back.tar
-rwxrwxr-x 1 root users 27719680 16. Dez 22:00 /windows/E/cron_backup/htdocs_back.tar

verwenden?
Schnippsel dazu...?
Code:
date | awk -F \: '{print $1}'

Gruß

R
 
Code:
#!/usr/bin/perl

if (-m "blafasel" + 86400 >= time()) {
        print "Ist noch frisch";
}
Bei Shell wird das ziemlich kluftig wenn man sowas wie `stat --format="%y"` splitten will.
 
OP
revealed

revealed

Guru
hi!

Danke für die Antwort! Aber deine Schleife kann ich nicht anwenden, weil ich sie nicht verstehe.

Hättest du eine Idee wie ich aus:
Code:
ls -lh /windows/E/cron_backup/htdocs_back.tar | awk -F \: '{print $1}'
-rwxrwxr-x 1 root users 27M 16. Dez 22
noch eine weitere Abbruchsequenz für /M... usw wegschneiden reinbekomm?

aber dann nur 2 printen? Also dass halt auch 16. Dez 22 rauskäme?

ne so is das quatsch von mir... :(

Gruß

R
 

gameboy

Hacker
Hallo revealed,

bin mir leider nicht ganz sicher, was Du genau machen willst...

Falls es Dir darum geht, von einer Ausgabe wie

-rwxrwxr-x 1 root users 27M 16. Dez 22
nur das Datum zu erhalten, kannst Du evtl. so vorgehen:

Code:
 <Dein_Kommando> | egrep -o "[^ ]+ [^ ]+ [^ ]+$"
Viele Grüße,
gameboy.
 
OP
revealed

revealed

Guru
aha ich schau mir das mal an!

das hab ich mir grad noch erschnipselt...:
Code:
disk@wild-thing:/tmp> tar -cf test-`date +%Y-%m-%d`.tar test.txt && ls -l test-`date +%Y-%m-%d`.tar
-rw-r--r-- 1 disk users 10240 16. Dez 23:09 test-2007-12-16.tar
disk@wild-thing:/tmp>

das soll heissen ich könnte es vorerst lösen indem das File einfach das aktuelle Datum erhält.

Gruß

R
 
OP
revealed

revealed

Guru
bin mir leider nicht ganz sicher, was Du genau machen willst...

Also eigendlich möchte ich ein Script:

das nachsieht, ob "3 tar Archive" vom heutigen Datum sind und dann sagt: "Stimmt" oder "Stimmt nicht!"

Code:
#!/bin/sh
## Tagesdatum mit Erstelldatum einer Datei Vergleichen:
# Variable heutiges Datum
date="$( date "+%d. %b %H" )";
# Variable auflistung des Erstelldatums der Datei
VAR="$( ls -lh /windows/E/cron_backup/htdocs_back.tar | awk -F \: '{print $1}' | egrep -o "[^ ]+ [^ ]+ [^ ]+$" )";
# Abfrage ob die Bedingung zutrifft
if [ "$VAR" = "$date" ]; then
  echo HTDOCS Backup [OK];
else
  echo HTDOCS Backup [Error];
fi;
# EOF

??
Code:
ls -lh /windows/E/cron_backup/htdocs_back.tar | awk -F \: '{print $1}' | egrep -o "[^ ]+ [^ ]+ [^ ]+$"
gibt wenn das file um 22 Uhr am selben Tag erstellt wurde:

und
Code:
date "+%d. %b %H"
ergibt um 22 Uhr am selben Tag:


Ausgabe!:::

wild-thing:/home/disk/Desktop # ./datumcheck
HTDOCS Backup [Error]
wild-thing:/home/disk/Desktop # sh /srv/www/htdocs/htdocsback.sh
tar: Entferne führende „/“ von Elementnamen
„/srv/www/htdocs/htdocs_back.tar“ entfernt
Saving htdocs [OK]
wild-thing:/home/disk/Desktop # ./datumcheck
HTDOCS Backup [OK]
wild-thing:/home/disk/Desktop #

DANKE!!!! :)

Gruß

R
 
OP
revealed

revealed

Guru
Damit sich der Sinn erschließt:

Es soll meine Backups überprüfen:
wild-thing:/ # cat /BackupCheck.sh
Code:
#!/bin/sh
## Tagesdatum mit Erstelldatum einer Datei Vergleichen:
# Variable heutiges Datum
# Ein Standardtext der Erscheinen soll:
echo "This determines wether the backupfiles are from today or not:
"
date="$( date "+%d. %b %H" )";
# Variable auflistung des Erstelldatums der Datei htdocs_back.tar
VARht="$( ls -lh /windows/E/cron_backup/htdocs_back.tar | awk -F \: '{print $1}' | egrep -o "[^ ]+ [^ ]+ [^ ]+$" )";
# Abfrage ob die Bedingung zutrifft
if [ "$VARht" = "$date" ]; then
  echo HTDOCS Backup [OK];
else
  echo HTDOCS Backup [Error];
fi;
# Variable auflistung des Erstelldatums der Datei nagios_back.tar
VARnag="$( ls -lh /windows/E/cron_backup/nagios_back.tar | awk -F \: '{print $1}' | egrep -o "[^ ]+ [^ ]+ [^ ]+$" )";
# Abfrage ob die Bedingung zutrifft
if [ "$VARnag" = "$date" ]; then
  echo Nagios Backup [OK];
else
  echo Nagios Backup [Error];
fi;
# Variable auflistung des Erstelldatums der Datei emailback.tar
VARmail="$( ls -lh /windows/E/cron_backup/emailback.tar | awk -F \: '{print $1}' | egrep -o "[^ ]+ [^ ]+ [^ ]+$" )";
# Abfrage ob die Bedingung zutrifft
if [ "$VARmail" = "$date" ]; then
  echo E-Mail Backup [OK];
else
  echo E-Mail Backup [Error];
fi;
#
exit 0
# EOF

und gibt dann das aus:
wild-thing:/ # ./BackupCheck.sh
Code:
This determines wether the backupfiles are from today or not:

HTDOCS Backup [Error]
Nagios Backup [Error]
E-Mail Backup [Error]

Wass dann hoffentlich schön in der Email steht, die ich mir von Cron erhoffe, nachdem er BackupCheck.sh 15 Minuten nach dem normalen Backup ausführt. Bzw! Mit "OK" <- :)

Danke nochmal für die Hilfe!

Gruß

R
 
OP
revealed

revealed

Guru
Hallo! Ich brauch bitte nochmal euere Hilfe.

Ich hab die SH einfach in Cron eingetragen und er meldet trotz allem jedesmal;

[error] -> wenn ich den Script in der Kommandozeile manuell ausführe dann kommt aber [OK] verdreht Cron da etwas?

Vielen Dank abermals im Voraus!

Edit: Komisch! Cron interpretiert das so:
Code:
+ echo 'This determines wether the backupfiles are from today or not:
'
This determines wether the backupfiles are from today or not:

+ cd /
++ date '+%d. %b %H'
+ date='17. Dec 22'
++ ls -lh /windows/E/cron_backup/htdocs_back.tar
++ awk -F : '{print $1}'
++ egrep -o '[^ ]+ [^ ]+ [^ ]+$'
+ VARht='Dec 17 22'
+ '[' 'Dec 17 22' = '17. Dec 22' ']'
+ echo HTDOCS Backup '[Error]'
HTDOCS Backup [Error]
++ ls -lh /windows/E/cron_backup/nagios_back.tar
++ awk -F : '{print $1}'
++ egrep -o '[^ ]+ [^ ]+ [^ ]+$'
+ VARnag='Dec 17 22'
+ '[' 'Dec 17 22' = '17. Dec 22' ']'
+ echo Nagios Backup '[Error]'
Nagios Backup [Error]
++ ls -lh /windows/E/cron_backup/emailback.tar
++ awk -F : '{print $1}'
++ egrep -o '[^ ]+ [^ ]+ [^ ]+$'
+ VARmail='Dec 17 22'
+ '[' 'Dec 17 22' = '17. Dec 22' ']'
+ echo E-Mail Backup '[Error]'
E-Mail Backup [Error]

habe die Zeile mit der Variable Date entsprechend so umgestellt, auch wenn es komisch ist, dass so interpretiert wird....

Code:
date="$( date "+%b %d %H" )";

sooo jetz klappt das erstmal! Habe noch MySQL zum Backup hinzugefügt. Und die Email fällt so aus:
Code:
Cron <root@wild-thing> /BackupCheck.sh
Von: 
root@
  An: 
root@
  Datum: 
Heute 22:05:01
   
This determines wether the backupfiles are from today or not:

HTDOCS Backup [OK]
Nagios Backup [OK]
E-Mail Backup [OK]
MySQL Backup [OK]

Man stelle Fest, die ersten 10 Tage im Monat werden bei den Vergleichswerten mite dem falschen Format verglichen und verbessere das so in der Hoffnung, dass man nicht zu müde war:
Code:
#!/bin/sh -x
## Tagesdatum mit Erstelldatum einer Datei Vergleichen:
#
# Ein Standardtext der Erscheinen soll:
echo "This determines wether the backupfiles are from today or not:
"
#  Variable heutiges Datum
date="$( date "+%Y-%m-%d %H" )";
#
# Variable auflistung des Erstelldatums der Datei htdocs_back.tar
VARht="$( ls -lh --full-time /windows/E/cron_backup/htdocs_back.tar | awk -F \: '{print $1}' | egrep -o "[^ ]+ [^ ]+$" )";
#
# Abfrage ob die Bedingung zutrifft
if [ "$VARht" = "$date" ]; then
  echo HTDOCS Backup [OK];
else
  echo HTDOCS Backup [Error];
fi;
#
# Variable auflistung des Erstelldatums der Datei nagios_back.tar
VARnag="$( ls -lh --full-time /windows/E/cron_backup/nagios_back.tar | awk -F \: '{print $1}' | egrep -o "[^ ]+ [^ ]+$" )";
#
# Abfrage ob die Bedingung zutrifft
if [ "$VARnag" = "$date" ]; then
  echo Nagios Backup [OK];
else
  echo Nagios Backup [Error];
fi;
#
# Variable auflistung des Erstelldatums der Datei emailback.tar
VARmail="$( ls -lh --full-time /windows/E/cron_backup/emailback.tar | awk -F \: '{print $1}' | egrep -o "[^ ]+ [^ ]+$" )";
#
# Abfrage ob die Bedingung zutrifft
if [ "$VARmail" = "$date" ]; then
  echo E-Mail Backup [OK];
else
  echo E-Mail Backup [Error];
fi;
#
# Variable auflistung des Erstelldatums der MySQL TAR
VARsql="$( ls -lh --full-time /windows/E/cron_backup/MySQL/MySQL.tgz | awk -F \: '{print $1}' | egrep -o "[^ ]+ [^ ]+$" )";
#
# Abfrage ob die Bedingung zutrifft
if [ "$VARsql" = "$date" ]; then
  echo MySQL TAR Backup [OK];
else
  echo MySQL TAR Backup [Error];
fi;
#
exit 0
# EOF

Grüße,

R
 
Oben