Bash Skript funktioniert manuell in Shell, aber nicht als Cronjob

_anonymous0815_

Lt. Commander
Registriert
Aug. 2020
Beiträge
1.303
Guten Abend liebe Computerbase-Foristen,

ich habe mir in den letzten 3 Tagen ein Skript zusammengestellt, was überprüfen soll, ob ein Docker Container online ist und wenn nicht, mir eine E-Mail schicken soll.

Jetzt funktioniert das Skript unter der Prämisse, wenn ich es in einer Shell ausführe, aber nicht als eingetragenes Skript in der crontab.

PS: Ja, ich verwende im Skript ssmtp, welches zurzeit nicht weiterentwickelt wird, das werde ich vermutlich dann noch ändern, wenn das Skript erst mal funktional ist.

Anbei das Skript im Spoiler

Bash:
if type ssmtp &> /dev/null;
then
    echo "ssmtp ist bereits installiert!"
else
    echo "Installiere ssmtp"; apt install -y ssmtp
fi

if type sendmail &> /dev/null;
then
        echo "sendmail ist bereits installiert!"
else
        echo "Installiere sendmail"; apt install -y sendmail
fi

PoS1="$(pwd)"
PoS2="$(basename $0)"
PathOfScript="$PoS1/$PoS2"

if [ -z "$PS1" ];
then
    echo "Interaktive Shell"

        echo "Gib die Konfigurationsdaten für den Mailserver an, von dem die E-Mail verschickt werden soll.";

        Sender=" "
        Passwd=" "
        SmtpServer=" "
    IFS='@'
    Empfaenger=" "

    echo "Gib deine Sender-E-Mail ein:";
    read Sender

    read -a strarr <<<"$Sender"

    rewriteDomain="${strarr[1]}"

    echo "Gib dein E-Mail Passwort ein:";
    read -s Passwd

    echo "Gib den SMTP-Server deines Providers (z.B. smtp.1und1.de:587) ein:"
    read SmtpServer

    echo "Gib die Empfaenger-E-Mail ein:";
    read Empfaenger

    mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.old
    chmod 640 /etc/ssmtp/ssmtp.conf.old

    install -m 640 /dev/null /etc/ssmtp/ssmtp.conf
    echo "root=$Sender">>/etc/ssmtp/ssmtp.conf
    echo "mailhub=$SmtpServer">>/etc/ssmtp/ssmtp.conf
    echo "rewriteDomain=$rewriteDomain">>/etc/ssmtp/ssmtp.conf
    echo "AuthUser=$Sender">>/etc/ssmtp/ssmtp.conf
    echo "AuthPass=$Passwd">>/etc/ssmtp/ssmtp.conf
    echo "AuthMethod=LOGIN">>/etc/ssmtp/ssmtp.conf
    echo "UseSTARTTLS=YES">>/etc/ssmtp/ssmtp.conf
    echo "FromLineOverride=YES">>/etc/ssmtp/ssmtp.conf
    echo "hostname=[ICODE]hostname[/ICODE]">>/etc/ssmtp/ssmtp.conf

    chfn -f [ICODE]hostname[/ICODE] root

    echo "To:$Empfaenger">"$(pwd)/email.txt"
    echo "From:$(hostname)@$(whoami).de">>"$(pwd)/email.txt"
    echo "Subject:Docker Storagenode-Container ist offline!">>"$(pwd)/email.txt"
    echo "">>"$(pwd)/email.txt"
    echo "Docker meldet zurueck, dass der Container offline ist.">>"$(pwd)/email.txt"

    if crontab -l | grep [ICODE]basename $0[/ICODE] &> /dev/null;
        then
                echo "Cronjob ist in Crontab eingetragen!"
        else
                echo "Cronjob wird in Crontab eingetragen."
                CrontabEntry="* * * * * $PathOfScript"
                (crontab -u $(whoami) -l; echo "$CrontabEntry" ) | crontab -u $(whoami) -
        fi

fi

if [ ! -f "$(pwd)/sent-mail" ];
then
    touch -t 200001011500 "$(pwd)/sent-mail"
fi


if [ "$(docker ps -a | awk 'NR==2 {print $7}')" != "Up" ];
then
    if [ $(find "$(pwd)/sent-mail" -mmin +60 -print) ]
    then
        /usr/sbin/sendmail -t < "$(pwd)/email.txt" && touch "$(pwd)/sent-mail"
    fi
fi

Im zweiten Spoiler packe ich die Fehlermeldung aus journalctl -xe

Er scheint die letzte if-Bedingung nicht richtig abzuarbeiten und versucht jedes Mal eine E-Mail zu versenden, wenn das Skript aufgerufen wird (minütlich), was aber immer fehlschlägt.

Apr 29 19:36:01 storjvm CRON[48918]: (root) CMD (/root/storj-mail.sh)
Apr 29 19:36:01 storjvm sSMTP[48924]: Creating SSL connection to host
Apr 29 19:36:02 storjvm sSMTP[48924]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384
Apr 29 19:36:03 storjvm cron[48924]: sendmail: 554 For explanation visit https://www.ionos.com/help/index.php?id=2425&ip=xxxxxxx&c=hd
Apr 29 19:36:03 storjvm sSMTP[48924]: 554 For explanation visit https://www.ionos.com/help/index.php?id=2425&ip=xxxxxxxx&c=hd
Apr 29 19:36:03 storjvm CRON[48917]: (root) MAIL (mailed 164 bytes of output but got status 0x0001 from MTA
 
Natürlich nicht. Wie auch?
Cronscripts sind noninteractive. Von der Konsole lesen geht nicht.
Außerdem gibt PWD alles zurück, nur nicht das was du anzunehmen scheinst.
Alles andere kommt eventuell später. Bau das Script erstmal so um, daß es auch durchläuft, ohne auf etwas oder jemanden zu warten oder Eingaben zu verlangen.
 
  • Gefällt mir
Reaktionen: playerthreeone
_anonymous0815_ schrieb:
if [ -z "$PS1" ];
RalphS schrieb:
Bau das Script erstmal so um, daß es auch durchläuft, ohne auf etwas oder jemanden zu warten oder Eingaben zu verlangen.
Habe ich damit bereits bedacht, die Abfragen finden nur statt, wenn ichs in einer Shell ausführe.
 
Gerade nur überflogen, aber gib in Zeile 86 mal den absoluten Pfad für docker an (so wie bei Sendmail).
 
RalphS schrieb:
Außerdem gibt PWD alles zurück, nur nicht das was du anzunehmen scheinst.
Da bin ich jetzt verunsichert, wird das Skript nicht in dem Verzeichnis ausgeführt, in dem es liegt? Die Intension war, dass man das Skript auch verschieben kann, ohne dass die Funktionalität außer Gefecht gesetzt wird.
Ergänzung ()

kartoffelpü schrieb:
Gerade nur überflogen, aber gib in Zeile 86 mal den absoluten Pfad für docker an (so wie bei Sendmail).
Scheint leider keine Veränderung zu bringen, er versucht trotzdem minütlich eine Mail zu versenden, obwohl er erst die Bedingungen erfüllen soll. Und das Versenden klappt zudem nicht.
 
Kein shebang am Anfang?
Setz das mal oben ins Script und poste das log.
Code:
exec &>/tmp/myscript.log
set -x
 
Uridium schrieb:
Kein shebang am Anfang?
Setz das mal oben ins Script und poste das log.
Code:
exec &>/tmp/myscript.log
set -x
Also er legt die Logfile an, diese bleibt allerdings leer.
Ergänzung ()

Uridium schrieb:
Kein shebang am Anfang?
Muss bei meinen Debuggingversuchen irgendwie verloren gegangen sein, war ursprünglich mal da, habs wieder eingefügt (#!/bin/bash).
Ergänzung ()

pardon, mit #!/bin/bash hat sich etwas getan, hier der Log:

  • type ssmtp
  • echo 'Installiere ssmtp'
Installiere ssmtp
+ apt install -y ssmtp

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Paketlisten werden gelesen…
Abhängigkeitsbaum wird aufgebaut…
Statusinformationen werden eingelesen…
Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt:
liblockfile1 lockfile-progs m4 procmail sendmail-base sendmail-cf
sensible-mda
Verwenden Sie »apt autoremove«, um sie zu entfernen.
Die folgenden Pakete werden ENTFERNT:
sendmail sendmail-bin
Die folgenden NEUEN Pakete werden installiert:
ssmtp
0 aktualisiert, 1 neu installiert, 2 zu entfernen und 0 nicht aktualisiert.
Es müssen 53,2 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 2.139 kB Plattenplatz freigegeben.
Holen:1 http://deb.debian.org/debian bullseye/main amd64 ssmtp amd64 2.64-10 [53,2 kB]
debconf: kann Oberfläche nicht initialisieren: Dialog
debconf: (TERM ist nicht gesetzt, die Dialog-Oberfläche kann daher nicht verwendet werden.)
debconf: greife zurück auf die Oberfläche: Readline
debconf: kann Oberfläche nicht initialisieren: Readline
debconf: (Diese Oberfläche bedarf eines steuernden Terminals.)
debconf: greife zurück auf die Oberfläche: Teletype
dpkg-preconfigure: kann Stdin nicht wieder öffnen:
Es wurden 53,2 kB in 0 s geholt (123 kB/s).
(Lese Datenbank ...
(Lese Datenbank ... 5%
(Lese Datenbank ... 10%
(Lese Datenbank ... 15%
(Lese Datenbank ... 20%
(Lese Datenbank ... 25%
(Lese Datenbank ... 30%
(Lese Datenbank ... 35%
(Lese Datenbank ... 40%
(Lese Datenbank ... 45%
(Lese Datenbank ... 50%
(Lese Datenbank ... 55%
(Lese Datenbank ... 60%
(Lese Datenbank ... 65%
(Lese Datenbank ... 70%
(Lese Datenbank ... 75%
(Lese Datenbank ... 80%
(Lese Datenbank ... 85%
(Lese Datenbank ... 90%
(Lese Datenbank ... 95%
(Lese Datenbank ... 100%
(Lese Datenbank ... 83616 Dateien und Verzeichnisse sind derzeit installiert.)
Entfernen von sendmail (8.15.2-22) ...
dpkg: sendmail-bin: Abhängigkeitsprobleme, wird aber wie gefordert dennoch entfernt:
sensible-mda hängt ab von sendmail-bin | mail-transport-agent; aber:
Paket sendmail-bin soll entfernt werden.
Paket mail-transport-agent ist nicht installiert.
Paket ssmtp, das mail-transport-agent bereitstellt, ist nicht installiert.
Paket sendmail-bin, das mail-transport-agent bereitstellt, soll entfernt werden.
Paket exim4-daemon-light, das mail-transport-agent bereitstellt, ist nicht installiert.
sensible-mda hängt ab von sendmail-bin | mail-transport-agent; aber:
Paket sendmail-bin soll entfernt werden.
Paket mail-transport-agent ist nicht installiert.
Paket ssmtp, das mail-transport-agent bereitstellt, ist nicht installiert.
Paket sendmail-bin, das mail-transport-agent bereitstellt, soll entfernt werden.
Paket exim4-daemon-light, das mail-transport-agent bereitstellt, ist nicht installiert.

Entfernen von sendmail-bin (8.15.2-22) ...
Vormals nicht ausgewähltes Paket ssmtp wird gewählt.
(Lese Datenbank ...
(Lese Datenbank ... 5%
(Lese Datenbank ... 10%
(Lese Datenbank ... 15%
(Lese Datenbank ... 20%
(Lese Datenbank ... 25%
(Lese Datenbank ... 30%
(Lese Datenbank ... 35%
(Lese Datenbank ... 40%
(Lese Datenbank ... 45%
(Lese Datenbank ... 50%
(Lese Datenbank ... 55%
(Lese Datenbank ... 60%
(Lese Datenbank ... 65%
(Lese Datenbank ... 70%
(Lese Datenbank ... 75%
(Lese Datenbank ... 80%
(Lese Datenbank ... 85%
(Lese Datenbank ... 90%
(Lese Datenbank ... 95%
(Lese Datenbank ... 100%
(Lese Datenbank ... 83563 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../ssmtp_2.64-10_amd64.deb ...
Entpacken von ssmtp (2.64-10) ...
ssmtp (2.64-10) wird eingerichtet ...
debconf: kann Oberfläche nicht initialisieren: Dialog
debconf: (TERM ist nicht gesetzt, die Dialog-Oberfläche kann daher nicht verwendet werden.)
debconf: greife zurück auf die Oberfläche: Readline
Trigger für man-db (2.9.4-2) werden verarbeitet ...
  • type sendmail
  • echo 'Installiere sendmail'
Installiere sendmail
+ apt install -y sendmail

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Paketlisten werden gelesen…
Abhängigkeitsbaum wird aufgebaut…
Statusinformationen werden eingelesen…
Das folgende Paket wurde automatisch installiert und wird nicht mehr benötigt:
libgnutls-openssl27
Verwenden Sie »apt autoremove«, um es zu entfernen.
Die folgenden zusätzlichen Pakete werden installiert:
sendmail-bin
Vorgeschlagene Pakete:
sendmail-doc rmail sasl2-bin
Die folgenden Pakete werden ENTFERNT:
ssmtp
Die folgenden NEUEN Pakete werden installiert:
sendmail sendmail-bin
debconf: kann Oberfläche nicht initialisieren: Dialog
debconf: (TERM ist nicht gesetzt, die Dialog-Oberfläche kann daher nicht verwendet werden.)
debconf: greife zurück auf die Oberfläche: Readline
debconf: kann Oberfläche nicht initialisieren: Readline
debconf: (Diese Oberfläche bedarf eines steuernden Terminals.)
debconf: greife zurück auf die Oberfläche: Teletype
dpkg-preconfigure: kann Stdin nicht wieder öffnen:
0 aktualisiert, 2 neu installiert, 1 zu entfernen und 0 nicht aktualisiert.
Es müssen noch 0 B von 921 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 2.139 kB Plattenplatz zusätzlich benutzt.
dpkg: ssmtp: Abhängigkeitsprobleme, wird aber wie gefordert dennoch entfernt:
sensible-mda hängt ab von sendmail-bin | mail-transport-agent; aber:
Paket sendmail-bin ist nicht installiert.
Paket mail-transport-agent ist nicht installiert.
Paket ssmtp, das mail-transport-agent bereitstellt, soll entfernt werden.
Paket sendmail-bin, das mail-transport-agent bereitstellt, ist nicht installiert.
Paket exim4-daemon-light, das mail-transport-agent bereitstellt, ist nicht installiert.

(Lese Datenbank ...
(Lese Datenbank ... 5%
(Lese Datenbank ... 10%
(Lese Datenbank ... 15%
(Lese Datenbank ... 20%
(Lese Datenbank ... 25%
(Lese Datenbank ... 30%
(Lese Datenbank ... 35%
(Lese Datenbank ... 40%
(Lese Datenbank ... 45%
(Lese Datenbank ... 50%
(Lese Datenbank ... 55%
(Lese Datenbank ... 60%
(Lese Datenbank ... 65%
(Lese Datenbank ... 70%
(Lese Datenbank ... 75%
(Lese Datenbank ... 80%
(Lese Datenbank ... 85%
(Lese Datenbank ... 90%
(Lese Datenbank ... 95%
(Lese Datenbank ... 100%
(Lese Datenbank ... 83582 Dateien und Verzeichnisse sind derzeit installiert.)
Entfernen von ssmtp (2.64-10) ...
Vormals nicht ausgewähltes Paket sendmail-bin wird gewählt.
(Lese Datenbank ...
(Lese Datenbank ... 5%
(Lese Datenbank ... 10%
(Lese Datenbank ... 15%
(Lese Datenbank ... 20%
(Lese Datenbank ... 25%
(Lese Datenbank ... 30%
(Lese Datenbank ... 35%
(Lese Datenbank ... 40%
(Lese Datenbank ... 45%
(Lese Datenbank ... 50%
(Lese Datenbank ... 55%
(Lese Datenbank ... 60%
(Lese Datenbank ... 65%
(Lese Datenbank ... 70%
(Lese Datenbank ... 75%
(Lese Datenbank ... 80%
(Lese Datenbank ... 85%
(Lese Datenbank ... 90%
(Lese Datenbank ... 95%
(Lese Datenbank ... 100%
(Lese Datenbank ... 83563 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../sendmail-bin_8.15.2-22_amd64.deb ...
debconf: kann Oberfläche nicht initialisieren: Dialog
debconf: (TERM ist nicht gesetzt, die Dialog-Oberfläche kann daher nicht verwendet werden.)
debconf: greife zurück auf die Oberfläche: Readline
Entpacken von sendmail-bin (8.15.2-22) ...
Vormals nicht ausgewähltes Paket sendmail wird gewählt.
Vorbereitung zum Entpacken von .../sendmail_8.15.2-22_all.deb ...
Entpacken von sendmail (8.15.2-22) ...
sendmail-bin (8.15.2-22) wird eingerichtet ...
update-alternatives: /usr/libexec/sendmail/sendmail wird verwendet, um /usr/sbin/sendmail-mta (sendmail-mta) im automatischen Modus bereitzustellen
update-alternatives: /usr/libexec/sendmail/sendmail wird verwendet, um /usr/sbin/sendmail-msp (sendmail-msp) im automatischen Modus bereitzustellen
Saving old /etc/mail/sendmail.cf as /etc/mail/sendmail.cf.old ...
Updating sendmail environment ...
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Writing configuration to /etc/mail/sendmail.conf.
Writing /etc/cron.d/sendmail.
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Writing configuration to /etc/mail/sendmail.conf.
Writing /etc/cron.d/sendmail.
Could not open /etc/mail/databases(No such file or directory), creating it.
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Creating /etc/mail/databases...

Checking filesystem, this may take some time - it will not hang!
... Done.

Checking for installed MDAs...
sasl2-bin not installed, not configuring sendmail support.

To enable sendmail SASL2 support at a later date, invoke "/usr/share/sendmail/update_auth"


Creating/Updating SSL(for TLS) information
Creating /etc/mail/tls/starttls.m4...
You already have sendmail certificates


* * * WARNING * WARNING * WARNING * WARNING * * ***

Everything you need to support STARTTLS (encrypted mail transmission
and user authentication via certificates) is installed and configured
but is NOT being used.

To enable sendmail to use STARTTLS, you need to:
1) Add this line to /etc/mail/sendmail.mc and optionally
to /etc/mail/submit.mc:
include(`/etc/mail/tls/starttls.m4')dnl
2) Run sendmailconfig
3) Restart sendmail

Checking {sendmail,submit}.mc and related databases...
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Creating /etc/mail/databases...
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Creating /etc/mail/databases...
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Creating /etc/mail/Makefile...
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Writing configuration to /etc/mail/sendmail.conf.
Writing /etc/cron.d/sendmail.
Disabling HOST statistics file(/var/lib/sendmail/host_status).
Creating /etc/mail/sendmail.cf...
Creating /etc/mail/submit.cf...
Informational: confCR_FILE file empty: /etc/mail/relay-domains
Informational: confCT_FILE file empty: /etc/mail/trusted-users
Updating /etc/mail/access...
Updating /etc/mail/aliases...
/etc/mail/aliases: 13 aliases, longest 10 bytes, 143 bytes total
sendmail (8.15.2-22) wird eingerichtet ...
Trigger für man-db (2.9.4-2) werden verarbeitet ...
++ pwd
+ PoS1=/root
++ basename /root/storj-mail.sh
  • PoS2=storj-mail.sh
  • PathOfScript=/root/storj-mail.sh
  • '[' -z '' ']'
  • echo 'Interaktive Shell'
Interaktive Shell
+ echo 'Gib die Konfigurationsdaten für den Mailserver an, von dem die E-Mail verschickt werden soll.'
Gib die Konfigurationsdaten für den Mailserver an, von dem die E-Mail verschickt werden soll.
  • Sender=' '
  • Passwd=' '
  • SmtpServer=' '
  • IFS=@
  • Empfaenger=' '
  • echo 'Gib deine Sender-E-Mail ein:'
Gib deine Sender-E-Mail ein:
  • read Sender
  • read -a strarr
  • rewriteDomain=
  • echo 'Gib dein E-Mail Passwort ein:'
Gib dein E-Mail Passwort ein:
  • read -s Passwd
  • echo 'Gib den SMTP-Server deines Providers (z.B. smtp.1und1.de:587) ein:'
Gib den SMTP-Server deines Providers (z.B. smtp.1und1.de:587) ein:
  • read SmtpServer
  • echo 'Gib die Empfaenger-E-Mail ein:'
Gib die Empfaenger-E-Mail ein:
  • read Empfaenger
  • mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.old
  • chmod 640 /etc/ssmtp/ssmtp.conf.old
  • install -m 640 /dev/null /etc/ssmtp/ssmtp.conf
  • echo root=
  • echo mailhub=
  • echo rewriteDomain=
  • echo AuthUser=
  • echo AuthPass=
  • echo AuthMethod=LOGIN
  • echo UseSTARTTLS=YES
  • echo FromLineOverride=YES
++ hostname
+ echo hostname=storjvm
++ hostname
  • chfn -f storjvm root
  • echo To:
++ pwd
++ hostname
++ whoami
+ echo From:storjvm@root.de
++ pwd
+ echo 'Subject:Docker Storagenode-Container ist offline!'
++ pwd
+ echo ''
++ pwd
+ echo 'Docker meldet zurueck, dass der Container offline ist.'
++ pwd
+ crontab -l
++ basename /root/storj-mail.sh
  • grep storj-mail.sh
  • echo 'Cronjob ist in Crontab eingetragen!'
Cronjob ist in Crontab eingetragen!
++ pwd
+ '[' '!' -f /root/sent-mail ']'
++ /usr/bin/docker ps -a
++ awk 'NR==2 {print $7}'
+ '[' Exited '!=' Up ']'
+++ pwd
++ find /root/sent-mail -mmin +60 -print
+ '[' ']'
 
Zuletzt bearbeitet:
_anonymous0815_ schrieb:
if [ -z "$PS1" ]; then echo "Interaktive Shell"
Das ist falsch. Wenn $PS1 leer ist, ist es keine interaktive Shell. Eine solche Prüfung mag funktionieren, genauer wäre echo $- |grep "i" >/dev/null && echo "interaktive shell".

Er sendet keine Mail, weil Du via touch -t 200001011500 "$(pwd)/sent-mail" die Datei auf einen Timestamp im Jahr 2000 setzt und später explizit auf eine Datei, die nicht älter ist als 1h (-mmin +60) ist, prüfst. /usr/sbin/sendmail wird nie ausgeführt.
Edit: Wobei... ist ja +60 (älter als 60min). Daher is es wohl eher anders rum. Die Datei existiert und ist jünger als 60min.
 
Zuletzt bearbeitet:
Uridium schrieb:
Das ist falsch. Wenn $PS1 leer ist, ist es keine interaktive Shell. Eine solche Prüfung mag funktionieren, genauer wäre echo $- |grep "i" >/dev/null && echo "interaktive shell".
Das ist verdammt komisch, ich habe den Schnipsel von Stackexchange und da war es auch genau verkehrt herum, schreibe ich dies aber so, dann kann ich bei einem Shellaufruf keine Eingaben tätigen und per Cron wartet das Skript auf Eingaben.
 
Falls jemand auf diesen Thread stoßen sollte und ein ähnliches Anliegen verfolgt, hier das funktionierende Skript:

Bash:
#!/bin/bash
#exec &>/tmp/myscript.log
#set -x

if [ "$RUN_BY_CRON" != "TRUE" ];
then

    if type /usr/sbin/ssmtp &> /dev/null;
    then
            echo "ssmtp ist bereits installiert!"
    else
            echo "Installiere ssmtp"; apt install -y ssmtp
    fi

    if type /usr/sbin/sendmail &> /dev/null;
    then
            echo "sendmail ist bereits installiert!"
    else
            echo "Installiere sendmail"; apt install -y sendmail
    fi

        echo "Gib die Konfigurationsdaten für den Mailserver an, von dem die E-Mail verschickt werden soll.";

    PoS1="$(pwd)"
    PoS2="$(basename $0)"
    PathOfScript="$PoS1/$PoS2"
    Sender=" "
    Passwd=" "
    SmtpServer=" "
    IFS='@'
    Empfaenger=""

    echo "Gib deine Sender-E-Mail ein:";
    read Sender

    read -a strarr <<<"$Sender"

    rewriteDomain="${strarr[1]}"

    echo "Gib dein E-Mail Passwort ein:";
    read -s Passwd

    echo "Gib den SMTP-Server deines Providers (z.B. smtp.1und1.de:587) ein:"
    read SmtpServer

    echo "Gib die Empfaenger-E-Mail ein:";
    read Empfaenger

    mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.old
    chmod 640 /etc/ssmtp/ssmtp.conf.old

    install -m 640 /dev/null /etc/ssmtp/ssmtp.conf
    echo "root=$Sender">>/etc/ssmtp/ssmtp.conf
    echo "mailhub=$SmtpServer">>/etc/ssmtp/ssmtp.conf
    echo "rewriteDomain=$rewriteDomain">>/etc/ssmtp/ssmtp.conf
    echo "AuthUser=$Sender">>/etc/ssmtp/ssmtp.conf
    echo "AuthPass=$Passwd">>/etc/ssmtp/ssmtp.conf
    echo "AuthMethod=LOGIN">>/etc/ssmtp/ssmtp.conf
    echo "UseSTARTTLS=YES">>/etc/ssmtp/ssmtp.conf
    echo "FromLineOverride=YES">>/etc/ssmtp/ssmtp.conf
    echo "hostname=`hostname`">>/etc/ssmtp/ssmtp.conf

    chfn -f `hostname` root

    rm $(pwd)/email.txt
    echo "To:$Empfaenger">>"$(pwd)/email.txt"
    echo "From:$(hostname)@$(whoami).de">>"$(pwd)/email.txt"
    echo "Subject:Docker Storagenode-Container ist offline!">>"$(pwd)/email.txt"
    echo "">>"$(pwd)/email.txt"
    echo "Docker meldet zurueck, dass der Container offline ist.">>"$(pwd)/email.txt"

    if crontab -l | grep `basename $0` &> /dev/null;
        then
                echo "Cronjob ist in Crontab eingetragen!"
        else

        UsedShell="SHELL=/bin/bash"
                (crontab -u $(whoami) -l; echo "$UsedShell" ) | crontab -u $(whoami) -

        CronEnvironment="RUN_BY_CRON="TRUE""
                (crontab -u $(whoami) -l; echo "$CronEnvironment" ) | crontab -u $(whoami) -

                echo "Cronjob wird in Crontab eingetragen."
                CrontabEntry="* * * * * $PathOfScript"
                (crontab -u $(whoami) -l; echo "$CrontabEntry" ) | crontab -u $(whoami) -

        fi

fi

if [ ! -f "$(pwd)/sent-mail" ];
then
    touch -t 200001011500 "$(pwd)/sent-mail"
fi


if [ "$(/usr/bin/docker ps -a | awk 'NR==2 {print $7}')" != "Up" ];
then
    if [ $(find "$(pwd)/sent-mail" -mmin +60 -print) ]
    then
        /usr/sbin/sendmail -t < "$(pwd)/email.txt" && touch "$(pwd)/sent-mail"
    fi
fi
 
Zurück
Oben