CronNachricht nur bei erfolgr. Ausführung *gelöst*

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
weshalb
Beiträge: 1271
Registriert: 16.05.2012 14:19:49

CronNachricht nur bei erfolgr. Ausführung *gelöst*

Beitrag von weshalb » 20.02.2017 16:45:16

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)?
Zuletzt geändert von weshalb am 21.02.2017 16:41:40, insgesamt 2-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 9230
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Cronbenachrichtigung nur bei Ausführung eines Scripts

Beitrag von Meillo » 20.02.2017 20:22:37

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!

Benutzeravatar
weshalb
Beiträge: 1271
Registriert: 16.05.2012 14:19:49

Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts

Beitrag von weshalb » 20.02.2017 21:25:37

Und was mache ich, wenn nicht das Script, sondern der Befehl an sich die Ausgabe erzeugt?

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/

Benutzeravatar
Meillo
Moderator
Beiträge: 9230
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts

Beitrag von Meillo » 20.02.2017 23:05:01

weshalb hat geschrieben:Und was mache ich, wenn nicht das Script, sondern der Befehl an sich die Ausgabe erzeugt?
Umleiten, zwischenspeichern, ...

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"
Oder:

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"
(Beides ungetestet hingeschrieben ...)

Oder, falls man den Rueckgabewert von sa-learn(1) nicht verwenden kann, den Inhalt der Ausgabe durchsuchen.
Use ed once in a while!

Benutzeravatar
MF
Beiträge: 115
Registriert: 14.08.2003 12:04:05

Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts

Beitrag von MF » 21.02.2017 08:32:42

Ich benutze dafür Cronic:
http://habilis.net/cronic/

Benutzeravatar
Meillo
Moderator
Beiträge: 9230
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts

Beitrag von Meillo » 21.02.2017 09:21:58

MF hat geschrieben:Ich benutze dafür Cronic:
http://habilis.net/cronic/
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.
Use ed once in a while!

Benutzeravatar
weshalb
Beiträge: 1271
Registriert: 16.05.2012 14:19:49

Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts

Beitrag von weshalb » 21.02.2017 15:09:37

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.
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)
Der Einzige Unterschied ist der, dass die Zeilen in der Reihenfolge vertauscht sind.

Benutzeravatar
Meillo
Moderator
Beiträge: 9230
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts

Beitrag von Meillo » 21.02.2017 15:21:25

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)
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:

Code: Alles auswählen

if [ -z "`ls /var/vmail/public/.Spamlern/cur/`" ] ; then
    exit
fi
Das muss man halt fachlich auf das Problem bezogen entscheiden. Darueber habe ich gar nicht nachgedacht. Ich habe bislang nur strukturell auf das Problem geschaut. ;-)
Use ed once in a while!

Benutzeravatar
weshalb
Beiträge: 1271
Registriert: 16.05.2012 14:19:49

Re: CronNachricht nur bei erfolgr. Ausführung eines Scripts

Beitrag von weshalb » 21.02.2017 16:41:16

Funktioniert. Super und Danke nochmal, hätte ich nicht hinbekommen.

Antworten