CronNachricht nur bei erfolgr. Ausführung *gelöst*
CronNachricht nur bei erfolgr. Ausführung *gelöst*
Hallo, ich habe ein per Cron aufgerufendes Script, welches mir Mails aus einem definierten Order (Spamlern) in Spamassassin anlernt und danach verschiebt.
Nun schickt Cron mir jeden Tag eine Mail, egal ob das Script was getan hat oder nicht. Wie kann man es so gestalten, dass nur nach erfolgreichem Anlernen/ Verschieben eine Nachricht kommt? Vielleicht die Cronmail ins Leere laufen lassen und die Benachrichtigung im Script selbst anhängen (wovon ich keine Ahnung habe)?
Nun schickt Cron mir jeden Tag eine Mail, egal ob das Script was getan hat oder nicht. Wie kann man es so gestalten, dass nur nach erfolgreichem Anlernen/ Verschieben eine Nachricht kommt? Vielleicht die Cronmail ins Leere laufen lassen und die Benachrichtigung im Script selbst anhängen (wovon ich keine Ahnung habe)?
Zuletzt geändert von weshalb am 21.02.2017 16:41:40, insgesamt 2-mal geändert.
Re: Cronbenachrichtigung nur bei Ausführung eines Scripts
Cron schickt dir immer dann eine Mail wenn das Script eine Ausgabe erzeugt. Du musst also dafuer sorgen, dass in dem Fall wenn keine Mails da sind auch keine Ausgabe erzeugt wird. Dann hast du was du willst.
Use ed once in a while!
Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts
Und was mache ich, wenn nicht das Script, sondern der Befehl an sich die Ausgabe erzeugt?
Bisher sieht es so aus:
Bisher sieht es so aus:
Code: Alles auswählen
#!/bin/bash
sa-learn --dbpath=/var/lib/spamassassin/.spamassassin/bayes --spam /var/vmail/public/.Spamlern/cur/
mv /var/vmail/public/.Spamlern/cur/* /var/vmail/public/learned/
Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts
Umleiten, zwischenspeichern, ...weshalb hat geschrieben:Und was mache ich, wenn nicht das Script, sondern der Befehl an sich die Ausgabe erzeugt?
Beispielsweise so:
Code: Alles auswählen
#!/bin/bash
output="`sa-learn --dbpath=/var/lib/spamassassin/.spamassassin/bayes --spam /var/vmail/public/.Spamlern/cur/`"
if [ $? -ne 0 ] ; then
exit
fi
mv /var/vmail/public/.Spamlern/cur/* /var/vmail/public/learned/
echo "$output"
Code: Alles auswählen
#!/bin/bash
temp=`mktemp`
trap 'rm -f "$temp"' 0 1 2 15
sa-learn --dbpath=/var/lib/spamassassin/.spamassassin/bayes --spam /var/vmail/public/.Spamlern/cur/ >/"$temp"
if [ $? -ne 0 ] ; then
exit
fi
mv /var/vmail/public/.Spamlern/cur/* /var/vmail/public/learned/
cat "$temp"
Oder, falls man den Rueckgabewert von sa-learn(1) nicht verwenden kann, den Inhalt der Ausgabe durchsuchen.
Use ed once in a while!
Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts
Ich benutze dafür Cronic:
http://habilis.net/cronic/
http://habilis.net/cronic/
Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts
Cronic mag in manchen Faellen das richtige Werkzeug sein, hier aber nicht, denn das Problem ist sein selbstgeschriebenes Script, das unangemessene Ausgaben erzeugt. Dieses Problem muss man an der Quelle angehen, nicht die Folgen unterdruecken.MF hat geschrieben:Ich benutze dafür Cronic:
http://habilis.net/cronic/
Use ed once in a while!
Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts
Erstmal danke Meillo, dass du mir das gleich fertig geschrieben hast (wüßte gar nicht, wo ich anfangen sollte)
Ich habe jetzt auch mal beide Scripts getestet und es trudeln immer noch Mails ein.
Ich habe jetzt auch mal beide Scripts getestet und es trudeln immer noch Mails ein.
Der Einzige Unterschied ist der, dass die Zeilen in der Reihenfolge vertauscht sind.mv: der Aufruf von stat für „/var/vmail/public/.Spamlern/cur/*“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden
Learned tokens from 0 message(s) (0 message(s) examined)
Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts
Vielleicht brauchst du eine andere Pruefung als die auf den Rueckgabewert von sa-learn. Meine Scripte sind nur beispielhafte Implementierungen. Vielleicht solltest du auch eher zu Beginn sowas wie das einbauen:weshalb hat geschrieben: Ich habe jetzt auch mal beide Scripts getestet und es trudeln immer noch Mails ein.
mv: der Aufruf von stat für „/var/vmail/public/.Spamlern/cur/*“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden
Learned tokens from 0 message(s) (0 message(s) examined)
Code: Alles auswählen
if [ -z "`ls /var/vmail/public/.Spamlern/cur/`" ] ; then
exit
fi
Use ed once in a while!
Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts
Funktioniert. Super und Danke nochmal, hätte ich nicht hinbekommen.