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)

Antwort per Email an