ubuntuusers.de

Email per SSMTP aus Script versenden

Status: Gelöst | Ubuntu-Version: Server 12.04 (Precise Pangolin)
Antworten |

Skalbjarn

Anmeldungsdatum:
27. August 2012

Beiträge: Zähle...

Moinsen zusammen,

ich möchte, dass einige Server (theoretisch reicht auch einer, da auf allen das gleiche System läuft) jeden Morgen ein apt-get update ausführt und anschließend ein apt-get upgrade -s und mir dessen Ausgabe per Email zusendet. Da auf den Servern eh SSMTP installiert ist, vorzugsweise darüber.

Zuerst wollte ich dies über den folgenden Eintrag im crontab von root erreichen.

1
10 4 * * 1-5 apt-get update && echo "`apt-get upgrade -s`" | ssmtp someone@example.de

Meinem Verständnis nach sollte diese Zeile dafür sorgen, dass von Montag bis Freitag um 4:10 Uhr die Paketlisten auf den neuesten Stand gebracht werden und danach das Ergebnis der Updatesimulation an die Emailadresse gesendet wird. In der Bash ausgeführt funktioniert dieser Befehl auch. Mittels angepasster Uhrzeit im Cronjob habe ich dann dafür gesorgt, dass der Job ausgeführt wird. Im Syslog taucht auch folgendes auf:

1
2
Sep  5 16:49:01 localhost CRON[18731]: (root) CMD (apt-get update && echo "`apt-get upgrade -s`" | ssmtp someone@example.com)
Sep  5 16:49:11 localhost sSMTP[18772]: Sent mail for root@raumobil.de (221 smtprelay05.exampleemailprovider.com closing connection) uid=0 username=root outbytes=6646

Allerdings, keinerlei Aktivität im Postfach.

Da in dem Crontab noch andere Jobs stehen, die mich nicht interessieren, da ein Fehlschlag nicht kritisch ist, auffällt und gelogt wird, will ich die MAILTO-Variable eigentlich nicht setzen. Auch einen extra User für diesen einen Cronjob fände ich überdimensioniert. Allerdings funktioniert das ganze auch dann nicht, wenn ich den Befehl in ein kurzes Bashscript auslagere.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#! /bin/bash

NOERROR=0
OPERATORMAIL=someone@example.com

apt-get update

if ( test $? -eq $NOERROR ); then
        MAILTEXT=`apt-get upgrade -s`
        echo "$MAILTEXT" | ssmtp $OPERATORMAIL
fi

Hier gilt das gleiche Spiel wie oben. Direkt aus der Bash gestartet, bekomme ich die Email. Per Cron gestartet, bekomme ich keine.

Weiß jemand woran das liegt, und wie man mein Vorhaben doch umsetzen kann?

Grüße Skalbjarn

harry123

Avatar von harry123

Anmeldungsdatum:
3. Mai 2006

Beiträge: 3188

Wohnort: Leipzig

Kann es sein, das du ssmtp via absolutem Pfad aufrufen musst, genau wie apt-get? Ich meinte, dass die PATH Variable im Crontab irgendwie nicht existiert!

Oder existiert so was:

SHELL=/bin/bash
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11

z.B. in deiner Crontab? (siehe Baustelle/Cron)

Grüße

Skalbjarn

(Themenstarter)

Anmeldungsdatum:
27. August 2012

Beiträge: 21

Moin harry123,

hatte ich mir auch schon überlegt, jedoch dann verworfen, weil ich mir überlegt habe, wo denn sonst der syslog-Eintrag herkommen sollte, wenn er sSMTP nicht findet.

Die Variablen sind im Crontab des Benutzers nicht definiert. Werde ich aber eben kurz tun und dann berichten.

Danke schon mal für die Anregung.

EDIT: Okay, Asche auf mein Haupt. PATH und SHELL gesetzt, jetzt funktionierts. Bleibt die Frage, warum schreibt Cron nicht einfach "command not found" ins syslog?

Grüßle und vielen Dank

Skalbjarn

Antworten |