E-Mails aus der Shell ohne Mailserver

Viele (eigentlich alle) der von mir betreuten Web- oder Datenbankserver haben keinen E-Mailserver wie Sendmail oder Postfix installiert.
Was aus Sicht der Sicherheit und diversen Leistungsaspekten sinnvoll ist, kann beim Scripten in der Shell schnell frustrierend sein. Ein gutes Beispiel ist z.B. ein Script, welches eine Benachrichtigung versenden soll, sobald eine Bedingung erfüllt oder ein Fehler aufgetreten ist.

Ich nutze hierfür gern das Programm sendEmail, welches via SMTP eine E-Mail aus der Shell versendet.

Unter Ubuntu wird es wie folgt installiert:

sudo apt-get install sendemail

Die Verwendung sieht dann in etwa so aus:

sendEmail -v -f email@domain.tld -s smtp.domain.tld:25
          -xu SMTP-Benutzer -xp SMTP-Passwort\
          -t empfaenger@domain.tld …\
          -u „Betreffzeile der E-Mail“\
          -m „Das ist eine E-Mail über SendEmail.“

Natürlich kann man auch auf integrierte Bibliotheken von Pearl oder Pyton zurückgreifen um E-Mails zu versenden, aber dieses kleine Programm finde ich ganz praktisch.

Hostname unter Ubuntu ändern

Den Rechnernamen auf einem System mit Desktop zu ändern ist recht einfach. Doch was muss geändert werden wenn man z.B. einen Server vor sich hat? Hier sind 3 Schritte erforderlich:

Zuerst muss der neue Name in die Datei /etc/hostname eingetragen werden.

sudo nano /etc/hostname

neuer_rechnername

Danach kann der Rechnername übernommen werden.

sudo hostname -F /etc/hostname

Im Anschluss muss in der Datei /etc/hosts der alte Rechnernamen in den Neuen Rechnernamen geändert werden.

sudo nano /etc/hosts

127.0.0.1     localhost    neuer_rechnername

Fertig!

Hinweis: Zur Sicherheit kann man, sofern möglich, das System neu starten um die Änderung zu prüfen.

Ubuntu Server 9.10 auf 10.04 upgraden

Da auf einem Server in der Regel keine grafische Oberfläche vorhanden ist, muss ein Update auf eine aktuelle Version von Ubuntu 10.04 LTS via Shell erledigt werden. Dies wird allerdings nicht mittels apt durchgeführt, sondern mit dem Befehl do-release-upgrade. Hierfür wird das Paket update-manager-core benötigt.

Bei mir war es bereits vorhanden. Wenn nicht dann wie folgt installieren.

sudo apt-get install update-manager-core

Anschließend muss in /etc/update-manager/release-upgrades geprüft werden …

sudo nano /etc/update-manager/release-upgrades

… ob in der letzten Zeile „Prompt=normal“ steht.

Anschließend das Upgrade starten mit …

sudo do-release-upgrade

Nun wird der aktuelle Stand geprüft, die Repositorys geladen und die Pakete ermittelt. Nach Bestätigung des Upgrade geht´s los. Nach einer ganzen Weile (je nach installierter Software und Internetgeschwindigkeit) wird man zum Entfernen der nicht mehr benötigten Pakete aufgefordert. Am Ende einfach neu starten und Ubuntu 10.04 LTS müsste laufen.

Dies habe ich nun schon bei 3 Produktivsystemen gemacht – ohne Probleme. Allerdings musste ich auf einem System nach dem Neustart die Paketlisten mittels apt-get update aktualisieren bevor ich neue Pakete installieren konnte.

Eintrag in Logdatei suchen

Logdateien können unter Umständen recht groß werden. Wenn man dann darin nun einen bestimmten Eintrag sucht oder nach einem Ereignis filtern möchte, kann das Programm grep helfen.

tail -f /var/log/mail.log | grep email@domain.tld

Diese Abfrage gibt dann alle Zeilen Zurück, die email@domain.tld enthalten. Natürlich ist diese Funktion nicht auf Logdateien beschränkt und kann auf beliebige Ausgaben in der Shell angewendet werden.

Alte Dateien in einem Verzeichnis löschen

In vielen meiner Scripte verwende ich Logdateien um Erfolg oder Misserfolg zu prüfen. Leider hat das auch zur Folge, dass sich unter Umständen über die Zeit einige Datei ansammeln. In einigen Fällen bietet es sich an direkt im Script die nicht mehr benötigten Dateien zu löschen.

Die folgende Zeile löscht alle Dateien im Verzeichnis /pfad/zum/verzeichnis die älter als 14 Tage sind.

find /pfad/zum/verzeichnis -ctime +14 -exec rm {} \;

Doch Vorsicht! Es werden tatsächlich alle Dateien gelöscht die sich im /pfad/zum/verzeichnis befinden. Es empfiehlt sich also vor dem produktiven Einsatz die Funktionsweise zu testen.