Wer kennt das nicht, man deployed einen neuen Service oder eine neue Applikation und möchte “noch schnell” einen regelmäßigen Statusreport zugeschickt bekommen. Ich bevorzuge dafür sendemail, ein paar Shellscripte und einen Cronjob.
Nehmen wir mal an, man ist auf einem Ubuntuserver, dann müssen die folgenden Pakete installiert werden sudo apt-get install sendemail libio-socket-ssl-perl libnet-ssleay-perl und man sollte ein Mailkonto für die zu versendenden Mails eingerichtet haben.
Wenn wir jetzt annehmen, dass eine Javapplikation unter /var/log/myapp/app.log ihre Logmeldungen ablegt und uns etwa die tägliche Anzahl der Warnings und Errors interessiert baut man sich ein kleines Shellskript errors.sh:
#!/bin/sh
LOG=/var/log/myapp/app.log
echo "Warning count: $(grep 'WARN' ${LOG})"
echo "Error count: $(grep 'ERROR' ${LOG})"
Das Skript kann man so schon auf der Konsole testen und als kleinen Helfer einsetzen. Um das Ganze jetzt noch als nächtlichen Report zu verschicken fehlen noch ein weiteres kleines Skript (mail.sh) und ein Cronjob.
#!/bin/sh
MON_SCRIPT=/path/to/script/errors.sh
#enter your mailserver host
MAIL_SERVER=localhost
#authentication credentials for the mail account
MAIL_USER=username
MAIL_PASSWORD=password
MAIL_FROM=example@localhost
#your email address, multiple mail addresses whitespace seperated
MAIL_RECIPIENTS="your email address"
#e.g. use tls
MAIL_OPTS="tls=yes"
${MON_SCRIPT} > mail.txt
/usr/bin/sendemail -s ${MAIL_SERVER} -xu ${MAIL_USER} -xp ${MAIL_PASSWORD} -o ${MAIL_OPTS} -f ${MAIL_FROM} -t ${MAIL_RECIPIENTS} -u "Mail Report" -m "" -a mail.txt
rm mail.txt
Soll jetzt z.B. um 23:59 eine Mail verschickt werden, nur noch den folgenden Cronjob in die Crontab eintragen:
59 23 * * * /path/to/script/mail.sh > /dev/null 2>&1
Dies führt dazu, dass jeden Tag um 23:59 eine Mail mit dem Titel “Mail Report” mit dem Output des errors.sh Skripts versendet wird. Die Möglichkeiten Informationen in den Mails unterzubringen sind natürlich keine Grenzen gesetzt – (Shell) Skripten sei Dank.