Ubuntu systemd service Mail versenden bei shutdown

  • Hallo,


    ich habe mir unter Ubuntu 18.04 ein Script geschrieben, das mich über einen Start bzw. das Beenden des Servers per Mail informiert. Die E-Mail beim Starten des Servers erhalte ich auch. Aber mit dem Script für den shutdown Service habe ich Problem. Die Datei sieht wie folgt aus:


    Ich habe schon alle möglichen Varianten probiert. Hat evtl. jemand ein ähnliches Script, das funktioniert?


    Gruß

    Joerg

    Server: yavdr-ansible (Ubuntu 18.04) Silverstone LC11, AT3IONT-I, 2GB DDR2, TT S2-6400, Riser RC11, SSD ADATA 120GB, Samsung 1TB
    Client: MLD5.4 Shuttle XS35GTV2, SSD OCZ 60GB, FB Medion X10

  • Bin zwar kein systemd-Guru, aber wenn "before network-online" als Startbedingung steht, macht das beim Start noch kein Problem - die Mail wird eben gesendet, sobald das Netzwerk (inkl. DHCP,DNS usw.) da ist.

    Beim Stop wird dann wohl gewartet, bis das Netzwerk "am Runterfahren" ist ... und damit wird die Mail wohl bestenfalls beim nächsten Start, wenn überhaupt, gesendet.

  • Was macht denn dein Skript /usr/local/bin/sendvdrmsg genau? Ist die Mail schon zuverlässig verschickt, wenn sich das Skript beendet oder hängt die Mail da eventuell noch in in einer Warteschlange?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • das Script ist recht simple

    Wenn ich das Script manuell aufrufe, funktioniert es.

    Server: yavdr-ansible (Ubuntu 18.04) Silverstone LC11, AT3IONT-I, 2GB DDR2, TT S2-6400, Riser RC11, SSD ADATA 120GB, Samsung 1TB
    Client: MLD5.4 Shuttle XS35GTV2, SSD OCZ 60GB, FB Medion X10

    2 Mal editiert, zuletzt von Griso ()

  • Root müsste das können, zumindest klappt es ja brim Systemstart. Meine Vermutung bisher war, dass evtl. das Netzwerk schon nicht mehr zur Verfügung steht. Aber ich konnte bislang nicht herausfinden, ob das wirklich die Ursache ist...

    Server: yavdr-ansible (Ubuntu 18.04) Silverstone LC11, AT3IONT-I, 2GB DDR2, TT S2-6400, Riser RC11, SSD ADATA 120GB, Samsung 1TB
    Client: MLD5.4 Shuttle XS35GTV2, SSD OCZ 60GB, FB Medion X10

  • Wenn ich mit journalctl ins Log schaue sehe ich, dass beim Start das Start-Script ausgeführt wird:

    Code
    -- Subject: Unit sendstartmail.service has begun start-up
    -- Unit sendstartmail.service has begun starting up.
    -- Subject: Unit sendstartmail.service has finished start-up
    -- Unit sendstartmail.service has finished starting up.

    Beim Herunterfahren des Systems finde ich die Einträge:

    Code
    -- Subject: Unit sendstartmail.service has begun start-up
    -- Unit sendstartmail.service has begun starting up.
    -- Subject: Unit sendstartmail.service has finished start-up
    -- Unit sendstartmail.service has finished starting up.

    Also, das Start-Script wird beendet.


    Das Script, das eigentlich beim Herunterfahren ausgeführt werden soll finde ich nicht.


    Das Script, das beim Starten ausgeführt wird, sieht so aus:

    Wenn ich systemctl list-unit-files aufrufe erhalte ich


    Code
    sendshutdownmail.service               enabled
    sendstartmail.service                  enabled

    Bin nach wie vor ratlos...

    Server: yavdr-ansible (Ubuntu 18.04) Silverstone LC11, AT3IONT-I, 2GB DDR2, TT S2-6400, Riser RC11, SSD ADATA 120GB, Samsung 1TB
    Client: MLD5.4 Shuttle XS35GTV2, SSD OCZ 60GB, FB Medion X10

  • Welches Programm steckt denn hinter dem mail Befehl? Neben dem schon von wmautner erwähnten Problem bei der Reihenfolge (also After=network-online.target statt Before) muss ja noch die E-Mail versendet werden. Wenn das nicht synchron durch den mail Befehl selbst passiert, sondern noch eine Warteschlange von postfix oder ähnlichem dazwischen steckt, können die Abhängigkeiten von systemd nicht richtig aufgelöst werden, weil es auf den falschen Prozess schaut.


    Um eine Fire-and-Forget E-Mail per Skript zu versenden nutze ich gerne die smptlib für Python3, die kann direkt mit einem SMTP-Server reden und man braucht kein komplexes Mail-System:

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ich glaube die Lösung war viel einfacher. Ich hatte zwei getrennte Services, einen für den Start- und einen für den Shutdown-Vorgang. Das hatte ich irgendwo so gesehen, bei meinen Recherchen im Internet. Aber das braucht es wohl gar nicht. Denn wenn ich im Startscript noch die Zeile


    Code
     ExecStop=/usr/local/bin/sendvdrmsg stop

    einfüge, dann funktioniert das ganze auch.

    Vielen Dank noch mal für die Hilfe!

    Server: yavdr-ansible (Ubuntu 18.04) Silverstone LC11, AT3IONT-I, 2GB DDR2, TT S2-6400, Riser RC11, SSD ADATA 120GB, Samsung 1TB
    Client: MLD5.4 Shuttle XS35GTV2, SSD OCZ 60GB, FB Medion X10

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!