Ich stehe vor folgendem Problem. Ich lasse ein Skript meine diversen Mailfächer kontrollieren. Um zu verhindern das der Mailserver zu oft eine Anfrage des Clients beantworten muss, habe ich eine Art Timer im Skript integriert,der sicherstellt, dass das Skript sich nur zB. alle 1000 Sekunden mit dem Server in Verbindung setzt. Die Zeit, die das Skript mindestens warten soll bis es sich wieder mit dem Server verbindet wird mit der Variable $MINTIME gesetzt.
Mein Problem ist nun, dass ich jedesmal wenn sich das Skript mit dem Server in Verbindung setzt, einen Zeitstempel in Form einer Datei auf der Festplatte, so wie es jetzt geschieht, oder einer Variable setzten muss. Für so eine Kleinigkeit eine Datei auf die Festplatte zu schreiben ist aber eine Ressourcenverschwendung. Viel besser weäre es wenn dieser Zeitstempel in einer globalen Variable gespeichert wird. Aber anscheinend ist sowas nicht möglich :-(
Ich fasse nochmals zusammen:
Ich suche eine Möglichkeit wie ein Skript einen Zeitstempel in einer Variable speichert. Danach beendet sich das Skript! Nach einiger Zeit wird das Skript wieder von einem User gestattet. Nun bräuchte diese neue Instanz des Skriptes Zugriff auf den Zeitstempel der alten Instanz.
PS: Eine Frage hätte ich noch:
Wie kann man in einem Skript überprüfen ob eine Variable schon existiert oder nicht? Bei einer Datei weis ich das schon wie man am unten stehenden Skript ja unschwer erkennen kann ;-)
Code:#!/bin/bash # ====================== # Configuration BEGINING # 1. MINTIME=10 # 2. MAILBOXFOLDERS=inbox.christoph,inbox.quartz # Configuration END # ================= if [ -e ./timer.lock ]; then echo "timer.lock vorhanden" > /dev/null else date +%s > timer.lock fi # neue Zeit weniger alten DIFFERENCE=$[`date +%s` - `cat timer.lock`] if [ $DIFFERENCE -gt $MINTIME ]; then date +%s > timer.lock fetchmail --check --folder $MAILBOXFOLDERS > ./mailstatus else echo "Server wurde nicht neu abgefragt" # > /dev/null fi # Actual script for checking if there are new mails if [ $# -le 0 ] then echo "Please specify a mailbox folder." exit 1 fi ALLMAILS=$(cat ./mailstatus | grep $1 | sed -e 's/ messages (.*//') SEENMAILS=$(cat ./mailstatus | grep $1 | sed -e 's/.* messages (//' | sed -e 's/ seen) for .*//') NEWMAILS=`expr $ALLMAILS - $SEENMAILS` if [ $NEWMAILS = - ] then echo "Error while accessing mailbox folder." exit 1 fi echo $NEWMAILS
EnnserVogt
Lesezeichen