Ich kann mir zwei Ansätze vorstellen, um dies zu tun. Sie können entweder eine while-Schleife verwenden, die einen "stat" -Befehl mit einer festgelegten Häufigkeit ausführt und eine Überprüfung durchführt, um festzustellen, ob die Dateigröße Ihre gewünschte Größe überschritten hat. Wenn ja, senden Sie eine E-Mail. Diese Methode ist in Ordnung, kann jedoch etwas ineffizient sein, da der Befehl "stat" unabhängig davon ausgeführt wird, ob ein Ereignis in der Datei vorhanden war oder nicht, und zwar mit der festgelegten Zeitfrequenz.
Die andere Methode umfasst die Verwendung von Dateisystemereignissen, die Sie mithilfe des Befehls für Beobachter abonnieren können inotifywatch
.
Methode 1 - Beispiel für alle X Sekunden
Wenn Sie Folgendes in ein Skript einfügen, sagen Sie notify.bash
:
#!/bin/bash
file="afile"
maxsize=100 # 100 kilobytes
while true; do
actualsize=$(du -k "$file" | cut -f1)
if [ $actualsize -ge $maxsize ]; then
echo size is over $maxsize kilobytes
.... send email ....
exit
else
echo size is under $maxsize kilobytes
fi
sleep 1800 # in seconds = 30 minutes
done
Wenn Sie es dann ausführen, wird über jeden Zugriff auf die Datei berichtet. Wenn dieser Zugriff dazu führt, dass die Dateigröße Ihre Mindestgröße überschreitet, wird eine E-Mail zum Senden und Beenden ausgelöst. Andernfalls wird die aktuelle Größe gemeldet und die Datei weiter angezeigt.
Methode 2 - Überprüfen Sie nur das Beispiel für Zugriffe
Die effizientere Methode wäre, die Datei nur zu überprüfen, wenn tatsächlich Zugriffe vorliegen. Die Arten von Zugriffen können variieren. In diesem Beispiel wird veranschaulicht, wie nur Dateizugriffe überwacht werden. Sie können jedoch nur andere Ereignisse überwachen, z. B. das Schließen der Datei. Wieder werden wir diese Datei benennen , notify.bash
:
#!/bin/bash
file=afile
maxsize=100 # 100 kilobytes
while inotifywait -e access "$file"; do
actualsize=$(du -k "$file" | cut -f1)
if [ $actualsize -ge $maxsize ]; then
echo size is over $maxsize kilobytes
.... send email ....
exit
else
echo size is under $maxsize kilobytes
fi
done
Das Ausführen dieses Skripts würde zu folgender Ausgabe führen:
$ ./notify.bash
Setting up watches.
Watches established.
Die Datei generiert eine Aktivität für die Datei und gibt nun die folgende Größe an:
$ seq 100000 > afile
$ du -k afile
576 afile
Die Ausgabe unseres Benachrichtigungsskripts:
afile ACCESS
size is over 100 kilobytes
An welchem Punkt würde es verlassen.
Email schicken
Um diese Aktivität auszuführen, können Sie einfach Folgendes im Skript ausführen:
subject="size exceeded on file $file"
emailAddr="user@somedom.com"
mailCmd="mail -s \"$subject\" \"$emailAddrs\""
( echo ""; echo "DATE: $(date)"; ) | eval mail -s "$subject" \"$emailAddr\"
Überlegungen
Die zweite Methode funktioniert in den meisten Situationen. $maxsize
Dies ist nicht der Fall, wenn die Datei bereits den Zeitpunkt überschreitet, an dem das Skript aufgerufen wird, und die Datei vom Typ keine weiteren Ereignisse enthält access
. Dies kann entweder durch eine zusätzliche Überprüfung des Skripts beim Aufrufen oder durch Erweitern der Ereignisse behoben werden, auf die inotifywatch
reagiert wird.
Verweise
inotify
ist etwas, auf das Sie achten sollten.