Sorry, habe die Antwort heut nachmittag schon geschrieben,
aber vergessen sie abzuschicken. Mittlerweile hast Du ja schon
eine Antwort erhalten... Ich schick sie trotzdem noch ;)
Michael Achtzehn schrieb:
> Hallo,
> ich möchte bei einem Überwachungsscript das alle 5 min über crontab
> gestartet wird und das im Fehlerfall eine Mail versendet, verhindern das
> die Mail mehr als einmal gesendet wird. Dazu setze ich eine Variable
> norepeat nach dem ersten Auftreten des Fehlers (export norepeat="1") -
> die beim nächsten Lauf des Scripts ausgewertet wird und ein mehrfaches
Nutzlos, da cron jedesmal einen neuen Prozess startet.
Versuch doch mal:
*/1 * * * * root env; export CVtest="On"; env;
In /etc/crontab
In den Mails kannst Du sehen: CVTest ist nicht vorhanden.
> Versenden der Mail verhindern soll. Nachdem ich herausgefunden habe,
> dass man das Script mit source ... starten muss, damit es in der
> aktuellen Shell läuft, funktioniert es bei manuellem Start auch.
> Auch in der Crontab starte ich das Script nun mit source /Pfad zum
> Script/script.sh. Hier ist die Variable beim nächsten Lauf nicht
> verfügbar. Inzwischen habe ich auch gelernt das es bei Corn keine
> Umgebung gibt - deshalb habe ich oben ins Script (unter der Zeile #!
> /bin/bash) folgende Zeilen eingetragen (wurde in einigen Foren empfohlen).
> . /etc/profile
> . ~/.profile
Das ist absoluter Quatsch, aus gutem Grund hat cron eine sehr
eingeschränkte Umgebung und es hilft hier auch nix.
> Leider funktioniert es immer noch nicht - beim wiederholten Lauf des
> Scripts ist die Umgebungsvariable nicht definiert.
>
> Wie kann ich das Problem lösen (ich möchte möglichst keine Datei zum
> zwischenspeichern des Wertes nutzen)?
Doch, eine Datei anlegen, z.B. in /var/run und auf deren Existenz
prüfen.
> Warum funktioniert das mit dem Vorgeben der Profile oben im Script nicht
> - obwohl andere User (mit anderen Linuxen) damit Erfolg hatten?
hmmm, glaub ich nicht.
> Was ist eurer Meinung nach die eleganteste Methode Variablen über die
> Laufzeit eines Scripts hinaus "aufzubewahren"?
Einen eigenen 'Dämon' erstellen? In etwa so (ungetestet):
--8<--script checkit------
#!/bin/bash
trap "rm -f /var/run/checkit; exit" 2 3 4 5 6 7 10 11 12 13 14 15
if ps au | grep $0 >/dev/null 2>&1 ; then
echo "$0 ist schon gestartet."
exit 1
else
echo $$ >/var/run/checkit
fi
nomsg=0
while true ; do
[...]
if <Fehler> ; then
if [ $nomsg -ne 1 ] ; then
<sende Fehlernachricht>
[...]
fi
nomsg=1
else
nomsg=0
fi
[...]
sleep 300
done
rm -f /var/run/checkit
exit
--8<---------------------
Und in /etc/init.d ein startscript anlegen, in dem checkit im
Hintergrund gestartet wird:
--8<---------------------
[...]
start() {
echo "Starte checkit"
checkit &
}
stop() {
echo "checkit wird beendet"
kill `cat /var/run/checkit`
}
case $1 in
start) start
;;
stop) stop
;;
restart) stop; start;
;;
*) echo -e "Parameter fehlt!\nAufruf: $0 start|stop|restart"
;;
esac
[...]
--8<---------------------
dann noch nach /etc/rcX.d verlinken...
--
Gruss
Bernd
--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/
Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)