Raspberry Pi – Systemstatus per E-Mail versenden

Gemeinfrei-ähnlich freigegeben durch unsplash.com - Louis Reed

Seit einigen Jahren verwende ich auf all meinen Raspberry Pis das gleiche Skript, um mir in regelmäßigen Abständen Informationen über das System und Hardware per E-Mail zu zusenden.

Ich habe vor kurzem das Skript ein wenig angepasst und zwei weitere Abschnitte hinzugefügt.

Im ersten Abschnitt werden nun die Details über die verwendete Raspberry Pi Hardware mit gesendet:

echo "Raspberry Pi Hardware" >> ${LOGFILE}
cat /sys/firmware/devicetree/base/model >> ${LOGFILE}

Es wird genau angegeben welches Raspberry Pi Model in welcher Revision verwendet wird. Das ist ganz praktisch, wenn man z.B. ein neues Netzteil, SD-Karte oder ein neues Gehäuse für den Pi benötigt.
Eine Übersicht über alle Pi-Generationen gibt es auf der offiziellen Website
https://www.raspberrypi.org/products/

Im zweiten Abschnitt werden Infos zum verwendeten Betriebssystem mitgeschickt:

echo "Raspberry Pi OS Informationen" >> ${LOGFILE}
cat /etc/os-release >> ${LOGFILE}

Das sieht dann z.B. so aus:

Raspberry Pi OS Informationen
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

Die anderen Abschnitte des Skripts habe ich nicht geändert. Es werden nach wie vor Informationen zu

  • aktuell eingeloggte Benutzer
  • Temperatur
  • Festplattenauslastung
  • Festplattenkapazität
  • versendete Bits über die Netzwerkschnittstellen Eth0 und WLAN0
  • usw.

ausgegeben.

Das Skript habe ich im Ordner „/etc/scripts“ angelegt, wo ich meine gesamten Shell-Skripte abgelegt habe.

sudo nano /etc/scripts/sysstatus.sh

Ich habe die Rechte für das Skript noch ein wenig angepasst, dass nur ein Benutzer mit „sudo“ das Skriptändern und ausführen kann.

sudo chown root:root /etc/scripts/sysstatus.sh
sudo chmod 0600 /etc/scripts/sysstatus.sh

Das Skript ist dann ausführbar zu machen:

sudo chmod +x /etc/scripts/sysstatus.sh

Damit das Skript auch zu einer festgelegten Zeit ausgeführt wird und euch die Informationen zu gesendet werden, ist noch ein Eintrag in der crontab zu erstellen.

sudo crontab -e

0 8 * * * /bin/bash /etc/scripts/sysstatus.sh

Das Skript setzt voraus, dass auf dem Raspberry Pi E-Mail mit „mutt“ versendet werden kann. Eine detaillierte Anleitung zum Einrichten gibts hier
E-Mail-Versand für den Raspberry Pi konfigurieren


Gib mir gerne einen Kaffee ☕ aus!

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.

PayPal Logo


liberapay.com/strobelstefan.org


Kaffee via Bitcoin

bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Und hier das gesamte Skript:

#!/bin/bash

# Stefan´s Weblog
# by strobelstefan.org
# Rasperry Pi Status per E-Mail
# https://strobelstefan.de/?p=13252&preview=true

# E-Mail Address
EMAIL="email@mydomain.de"

# Remove log file to make sure we have the correct to send out via EMAIL
LOGFILE="/var/log/status.log"

rm ${LOGFILE}


echo "Raspberry Pi Hardware" >> ${LOGFILE}
cat /sys/firmware/devicetree/base/model >> ${LOGFILE} 
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Raspberry Pi OS Informationen" >> ${LOGFILE}
cat /etc/os-release >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Status Panel" >> ${LOGFILE}
date >> ${LOGFILE}
uname -a >> ${LOGFILE}
uptime >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Temperature (1/1000)" >> ${LOGFILE}
cat /sys/devices/virtual/thermal/thermal_zone0/temp >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Hard drive" >> ${LOGFILE}
free >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
df -h >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "CPU Frequency Kilohertz" >> ${LOGFILE}
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "CPU Voltage" >> ${LOGFILE}
vcgencmd measure_volts core >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Loads" >> ${LOGFILE}
echo "[1min] - [5min] - [15min]" >> ${LOGFILE}
cat /proc/loadavg >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Memory" >> ${LOGFILE}
cat /proc/meminfo >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Eth0 sent & received" >> ${LOGFILE}
cat /sys/class/net/eth0/statistics/tx_bytes /sys/class/net/eth0/statistics/rx_bytes >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "WLAN0 sent & received" >> ${LOGFILE}
cat /sys/class/net/wlan0/statistics/rx_bytes /sys/class/net/wlan0/statistics/tx_bytes >> ${LOGFILE}


# This line sends out the LOGFILE to defined EMAIL
# Please refer to https://strobelstefan.de/2020/12/01/e-mail-versand-fuer-den-raspberry-pi-konfigurieren/
# You need to install some additional packages and you have to configure them.
echo 'Your Nextcloud reports its status.' | mutt ${EMAIL} -a ${LOGFILE} -s "Nextcloud - Reports its System Status"

Bildquelle: Gemeinfrei-ähnlich freigegeben durch unsplash.comLouis Reed

Log-Files in der Konsole betrachten

Linux-Systeme legen in bestimmten Verzeichnissen automatisiert Log-Dateien an, die dem Nutzer Aufschluss über das Verhalten des Systems geben. Besonders gut sind Log-Dateien geeignet, wenn man etwas konfiguriert und auf Feedback angewiesen ist. Dieses Feedback kann man sich dann übe Log-Dateien oder andere Tools, die die Ausgabe direkt über die Konsole ausgeben, einholen

(U)Kubuntu und Debian speichern die Log-Dateien normalerweise in das Verzeichnis /var/log, wo sie von den Benutzern oder nur vom Root eingesehen werden können.

Editoren

Editoren für die Betrachtung von Log-Dateien ebenfalls verwendet werden. Ich verwende gerne den Editor nano, da er schnell und leicht zu handhaben ist.

nano datei.log

tail

tail bietet mehrere hilfreiche Funktionen zum Betrachten von Log-Dateien an. Die statische Ansicht ruft die Log-Datei einmal auf und gibt das Ergebnis auf der Konsole aus.

tail datei.log

Mit einer weiteren Funktion von tail kann man Log-Fils fortlaufend betrachten, d.h. das System bzw. die Applikation schreibt in die Log-Datei und das Ergebnis wird fortlaufend in der Konsole angezeigt.

tail -f datei.log


tail -f
tail -f

grep

Möchte man in Log-Dateien nach bestimmten Einträgen suchen, dann bietet sich grep hierfür besonders gut an.

tail -f datei.log | grep SUCHBEGRIFF

multitail

Möchte man mehrere Log-Dateien gleichzeitig betrachten, dann bieten die herkömmlichen Tools wie tail nur die Möglichkeit mehrere Konsolen-Fenster zu öffnen und dort jeweils ein Log dazustellen.
multitail hingegen bietet die Funktion mehrere Log-Dateien in einem Konsolenfenster aufzurufen. Da das Tool nicht standardmäßig installiert ist, ist die nachzuholen

sudo aptitude install multitail


Nach der Installation kann man multitail über die Konsole aufrufen.

Möchte man die Log-Files untereinander in Zeilen dargestellt haben, dann ist das der richtige Befehl

multitail datei1.log datei2.log

Sollen die Dateien nebeneinander in jeweils einer eigenen Spalte ausgegeben werden, lautet der Befehl
für 2 Spalten

multitail -s 2 datei1.log datei2.log


multitail - 2 columns
multitail – 2 columns

für 3 Spalten

multitail -s 3 datei1.log datei2.log datei3.log


multitail - 3 columns
multitail – 3 columns

Ausgabe von Tools in Log-Files umleiten

Linux bietet den Benutzern auch ein sehr einfaches Mittel, Log-Dateien zu erzeugen. Möchte man z.B. die Lese/Schreib-Zugriffe auf die Festplatte überwachen und das Ergebnis in eine Datei schreiben, geht das wie folgt.

Das Tool sysstat muss auf dem System bereits installiert sein, ansonsten geht das mit dem Befehl

sudo aptitude install sysstat

Nach der Installation kann man die Protokollierung aktivieren.

sudo iostat Aktualisierungsintervall-in-Sekunden > Ausgabedatei


Als Beispiel könnte das so aussehen.

sudo iostat 30 > /home/pi/read_write.log


Öffnen kann man den Log in einem anderen Konsolen-Fenster zeitgleich mit dem Befehl

tail -f /home/pi/read_write.log

Rasperry Pi Status per E-Mail

In meinem Beitrag ➡ Systeminformationen beim Login auf der Konsole ausgeben beschreibe ich, wie man Systemstatusinformationen bei jedem Login auf der Konsole ausgegeben bekommt. Da man aber nicht immer die Konsole zu Hand hat ist oftmals etwas unpraktisch. Da einer meiner Pis als Überwachungskameras im Einsatz ist, wollte ich in regelmäßigen Abständen einen Statusbericht per E-Mail erhalten.

Bevor ihr hier weitermachen könnt, wird ein funktionierender MTA auf dem Pi benötigt, der für euch die E-Mail an ein definiertes Postfach versenden kann. Falls ihr das noch nicht konfiguriert habt, schaut euch doch mal die folgende Anleitung hier im Blog an ➡ Motion mit E-Mail-Versand, dort wird die Installation und Konfiguration von Postfix beschrieben.

Funktioniert der E-Mail-Versand, dann könnt ihr das folgende Skript auf euren Pi kopieren. Es ist dabei zu beachten, dass manche Befehle nur als sudo/root auszuführen sind. Ihr könnt das Script damit z.B. in das Verzeichnis /bin/status kopieren.
Ich habe das Skript jedoch in das home-Verzeichnis des Pi-Nutzers gelegt. Hierbei ist darauf zu achten, dass zum editieren keine besonderen Rechte vorhanden sind und ggf. andere Benutzer das Skript um weitere Befehle erweitern könnten.

Also Skript anlegen und den Inhalt hinein kopieren:

sudo nano /bin/status/syssstatus.sh

#!/bin/bash

rm /var/log/status.log

echo "Statusanzeige" >> /var/log/status.log
date >> /var/log/status.log
uname -a >> /var/log/status.log
uptime >> /var/log/status.log
echo "" >> /var/log/status.log
echo "" >> /var/log/status.log
echo "Logged In Users" >> /var/log/status.log
users >> /var/log/status.log
echo "" >> /var/log/status.log
echo "Temparature (1/1000)" >> /var/log/status.log
cat /sys/devices/virtual/thermal/thermal_zone0/temp >> /var/log/status.log
echo "" >> /var/log/status.log
echo "" >> /var/log/status.log
echo "Hard drive" >> /var/log/status.log
free >> /var/log/status.log
echo "" >> /var/log/status.log
echo "" >> /var/log/status.log
df -h >> /var/log/status.log
echo "" >> /var/log/status.log
echo "" >> /var/log/status.log
echo "CPU Frequency Kilohertz" >> /var/log/status.log
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq >> /var/log/status.log
echo "" >> /var/log/status.log
echo "CPU Voltage" >> /var/log/status.log
vcgencmd measure_volts core >> /var/log/status.log
echo "" >> /var/log/status.log
echo "" >> /var/log/status.log
echo "Loads" >> /var/log/status.log
echo "[1min] - [5min] - [15min]" >> /var/log/status.log
cat /proc/loadavg >> /var/log/status.log
echo "" >> /var/log/status.log
echo "" >> /var/log/status.log
echo "Memory" >> /var/log/status.log
cat /proc/meminfo >> /var/log/status.log
echo "" >> /var/log/status.log
echo "" >> /var/log/status.log
echo "Eth0 sent & received" >> /var/log/status.log
cat /sys/class/net/eth0/statistics/tx_bytes /sys/class/net/eth0/statistics/rx_bytes >> /var/log/status.log
echo "" >> /var/log/status.log
echo "" >> /var/log/status.log
echo "WLAN0 sent & received" >> /var/log/status.log
cat /sys/class/net/wlan0/statistics/rx_bytes /sys/class/net/wlan0/statistics/tx_bytes >> /var/log/status.log

echo 'Your Raspispy reports its status.' | mail -a /var/log/status.log -s "Raspispy - Sysstatus"  < /var/log/status.log

Das Skript ausführbar machen

sudo chmod +x /bin/status/syssstatus.sh

Zum Abschluss tragt ihr noch einen Cron-Job ein, damit das Skript in regelmäßigen Abständen ausgeführt wird.

sudo crontab -e

In diesem Beispiel wird das Skript automatisch um 8 Uhr ausgeführt und sendet eine Nachricht an die angegebenen E-Mail-Adresse:

0 8 * * * /bin/bash /bin/status/syssstatus.sh

Weitere Hilfe zum Anlegen von Cron-Jobs findet ihr in meinem Beitrag ➡ Automatisches Update mit Reboot mit Hilfe eines Cron-Jobs


Gib mir gerne einen Kaffee ☕ aus!

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.

PayPal Logo


liberapay.com/strobelstefan.org


Kaffee via Bitcoin

bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Nachtrag vom September 2019

Kürzlich habe ich bei all meinen Raspberry Pis ein Upgrade auf das aktuellste Betriebssystem "Raspbian Buster" durchgeführt. Bei dieser Gelegenheit habe ich das obige Skript angepasst, so dass ich künftig in der Statusmeldung auch die Distributionsinformationen erhalte.
Ich habe die folgenden zwei Zeilen eingegeben:

echo "Raspbian Informationen"
cat /etc/os-release >> /var/log/status.log

Aktualisiertes Skript zum Oktrober 2018 mit Variablen

#!/bin/bash

# E-Mail Address
EMAIL='mail@mail.de'

#Location of Log File
LOGFILE='/var/log/status.log'

rm ${LOGFILE}

echo "Statusanzeige" >> ${LOGFILE}
date >> ${LOGFILE}
uname -a >> ${LOGFILE}
uptime >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Logged In Users" >> ${LOGFILE}
users >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Temparature (1/1000)" >> ${LOGFILE}
cat /sys/devices/virtual/thermal/thermal_zone0/temp >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Hard drive" >> ${LOGFILE}
free >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
df -h >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "CPU Frequency Kilohertz" >> ${LOGFILE}
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "CPU Voltage" >> ${LOGFILE}
vcgencmd measure_volts core >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Loads" >> ${LOGFILE}
echo "[1min] - [5min] - [15min]" >> ${LOGFILE}
cat /proc/loadavg >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Memory" >> ${LOGFILE}
cat /proc/meminfo >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "Eth0 sent & received" >> ${LOGFILE}
cat /sys/class/net/eth0/statistics/tx_bytes /sys/class/net/eth0/statistics/rx_bytes >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "" >> ${LOGFILE}
echo "WLAN0 sent & received" >> ${LOGFILE}
cat /sys/class/net/wlan0/statistics/rx_bytes /sys/class/net/wlan0/statistics/tx_bytes >> ${LOGFILE}

echo 'Your Raspispy reports its status.' | mail -a ${LOGFILE} -s "Raspispy - Sysstatus"  ${EMAIL} < ${LOGFILE}

Systeminformationen beim Login auf der Konsole ausgeben

In einem früheren Beitrag hier im Blog habe ich schon mal kurz beschrieben, wie man den Begrüßungstext auf der Konsole anpassen kann. ( ➡ SSH-Terminal – Begrüßungstext anpassen
In diesem Beitrag gehts das Ganz noch ein Stückchen weiter. Neben reinem Text kann man auch relevante Systeminfos anzeigen lassen und das auch in Farbe.

Ihr müsst hier einfach die Datei /etc/bash.bashrc editieren. Beachtet aber, dass ihr nicht reinen Text dort reinschreiben könnt, sondern in Bash verpacken müsst.

Öffnet die Daten mit einem Editor, hier z.B. nano

sudo nano /etc/bash.bashrc

Scrollt an das Ende der Datei und fügt die folgenden Code-Zeilen ein und speichert anschließend die Änderung ab.

echo -e "\n";
echo -e "\033[1;33m Welcome to your Pi \033[0m"
echo -e "\n";
echo -e "==================================================================="
echo -e "\033[1;33m Debian Version: \033[0m"  `cat /etc/debian_version`
echo -e "\033[1;33m Kernel Version:  \033[0m" `uname -a | awk '{print $3}'`
echo -e "==================================================================="
echo -e "\033[1;33m Logged in  since:     \033[0m" `uptime | awk '{print $1}'`
echo -e "\033[1;33m System time: \033[0m"  `date | awk '{print $4}'`
echo -e "\033[1;33m Uptime in days: \033[0m"  `uptime | awk '{print $3}'`
echo -e "==================================================================="
echo -e "\033[1;33m Speichernutzung: \033[0m" `cat /proc/meminfo|grep 'MemF'| awk '{print $2/1000}'`
echo -e "==================================================================="
echo -e "\033[1;33m Your user ID:   \033[0m" `/usr/bin/id`
echo -e "\033[1;33m User name:   \033[0m" `/usr/bin/whoami`
echo -e "\033[1;33m You are a member of the following groups:   \033[0m" 
echo -e `/usr/bin/groups`
echo -e "\033[1;33m Logged in users:   \033[0m" `/usr/bin/users`
echo -e "==================================================================="
echo -e "\033[1;33m User     Anschluß     Seit              von \033[0m"
/usr/bin/who
echo -e "==================================================================="

bash.bashrc
bash.bashrc

Möchtet Ihr neben den Informationen noch ein Bild ausgegeben bekommen, dann könnt ihr das kleine Tool jp2a verwenden, damit lassen sich ganz einfach Bilder in ASCII-Code umwandeln.

sudo aptitude install jp2a

Für das Konvertieren von einem Bild nimmt man den Befehl:

jp2a --colors picture.jpg > picture.txt


Das Bild wird in das ACII-Format konvertier, wobei die Farben erhalten bleiben und das Ergebnis in die Datei picture.txt geschrieben wird.
Weiter Infos zu den Befehlen findet ihr in den manpage von Ubuntu http://manpages.ubuntu.com/manpages/trusty/en/man1/jp2a.1.html


Gib mir gerne einen Kaffee ☕ aus!

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.

PayPal Logo


liberapay.com/strobelstefan.org


Kaffee via Bitcoin

bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Ergänzung

Möchtet ihr nur einen Schriftzug in die /etc/bash.bashrc einfügen, dann könnt ihr das Tool figlet verwenden.
Aus den Repositories ist das mit dem üblichen Befehl schnell installiert

sudo aptitude install figlet

Anschließen könnt ihr euren Schriftzug erzeugen lassen

figlet mein Schriftzug


figlet - mein Schriftzug
figlet – mein Schriftzug

Weitere Infos rund um figlet findet ihr in den F.A.Q.s ➡ http://www.figlet.org/faq.html

Möchte man mehr Informationen über den Speicher Memory erfahren, dann kann man noch folgende Befehle verwenden:

echo -e "\033[1;33m Memory Total (MB): \033[0m" `cat /proc/meminfo|grep 'MemT'| awk '{print $2/1024}'`
echo -e "\033[1;33m Memory Available (MB): \033[0m" `cat /proc/meminfo|grep 'MemA'| awk '{print $2/1024}'`
echo -e "\033[1;33m Memory Free (MB): \033[0m" `cat /proc/meminfo|grep 'MemF'| awk '{print $2/1024}'`

Informationen über das System können auch aus dem Verzeichnis /proc ausgelesen werden:

cd /proc
ls
cat /proc/meminfo