Statusmail von der Diskstation: Unterschied zwischen den Versionen
imported>Raymond →Erstellen des Scripts: CPU-Auslastung: $cpu_auslastung hinzugefügt |
imported>Raymond →Erstellen des Scripts: typo |
||
(11 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 9: | Zeile 9: | ||
eine Statusmail mit diversen Infos zu verschicken. | eine Statusmail mit diversen Infos zu verschicken. | ||
Grundsätzlich kann diese Möglichkeit allerdings zum Versenden von allen | Grundsätzlich kann diese Möglichkeit allerdings zum Versenden von allen möglichen Infos/Warnungen per E-Mail genutzt werden. | ||
== Voraussetzungen == | == Voraussetzungen == | ||
Zeile 26: | Zeile 26: | ||
<pre> | <pre> | ||
Status der | Status der Diskstation (Nas (DS-410j)) vom 09.09.11 (13:25): | ||
-------------------------------------------- | |||
[Speicherplatz in TB] | [Speicherplatz in TB] | ||
Groesse Datentraeger: 5.4T | Groesse Datentraeger: 5.4T | ||
Freier Speicher: | Freier Speicher: 688.6G | ||
Belegter Speicher: 4. | Belegter Speicher: 4.7T (87%) | ||
[Auslastung] | |||
CPU-Auslastung: 0% | |||
Memory: 86% | |||
Swap: 1% | |||
Indexing Queue: 2 | |||
Thumbs Queue: 0 | |||
FLV Queue: 0 | |||
[Datentraeger] | [Datentraeger] | ||
Volume 1: | Volume 1: 41 Grad, 7818 Stunden Laufzeit | ||
Volume 2: 42 Grad, | Volume 2: 42 Grad, 7808 Stunden Laufzeit | ||
Volume 3: 42 Grad, | Volume 3: 42 Grad, 7962 Stunden Laufzeit | ||
Volume 4: 41 Grad, | Volume 4: 41 Grad, 7803 Stunden Laufzeit | ||
[IP] | [IP] | ||
Externe IP: | Externe IP: 69.15.45.4 | ||
Interne IP: 192.168.178.25 | |||
[Aktuelle Netzwerkverbindungen] | [Aktuelle Netzwerkverbindungen] | ||
Active Internet connections (w/o servers) | Active Internet connections (w/o servers) | ||
Proto Recv-Q Send-Q Local Address | Proto Recv-Q Send-Q Local Address Foreign Address State | ||
tcp | tcp 0 0 Nas:5000 maze128.fritz.box:33057 ESTABLISHED | ||
tcp | tcp 0 0 Nas:5000 maze128.fritz.box:33050 ESTABLISHED | ||
tcp | tcp 0 0 Nas:5000 maze128.fritz.box:33056 ESTABLISHED | ||
tcp | tcp 0 0 Nas:5000 maze128.fritz.box:33054 ESTABLISHED | ||
[Netzwerkstatistik eth0] | [Netzwerkstatistik eth0] | ||
RX bytes: | RX bytes:1375702476 (1.2 GiB) | ||
TX bytes: | TX bytes:43629973 (41.6 MiB) | ||
[Uptime] | [Uptime] | ||
Uptime: | Uptime: 2:08 Stunden | ||
[Wetter] | |||
Temperatur: 20 Grad C | |||
Luftfeuchtigkeit: 73% | |||
Vorhersage: Mostly Sunny | |||
[Letzte Nachrichten] | |||
Sep 9 13:14:24 synoindexd: audio_parse.cpp (134) FAILED TO WRITE PIC FILE | |||
</pre> | </pre> | ||
Zeile 83: | Zeile 96: | ||
Das Script muss je nach Version der Diskstation noch angepasst werden, besonders | Das Script muss je nach Version der Diskstation noch angepasst werden, besonders | ||
die Werte $hours und $temperatur. Daher diese Werte am besten vorher mal im | die Werte $hours und $temperatur. Daher diese Werte am besten vorher mal im | ||
Terminal ausprobieren und schauen ob bei dem verwendeten Befehl etwas | Terminal ausprobieren und schauen ob bei dem verwendeten Befehl etwas Sinnvolles raus | ||
kommt. | kommt. | ||
Zeile 90: | Zeile 103: | ||
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
LOCATION='MEINE_STADT' | |||
LOGFILE=/var/log/shutdown.log | LOGFILE=/var/log/shutdown.log | ||
echo 6 > /dev/ttyS1 | |||
echo 7 > /dev/ttyS1 | |||
model=`dmesg | grep -m 1 Model | awk '{print $4}'` | model=`dmesg | grep -m 1 Model | awk '{print $4}'` | ||
netstat=`netstat -tu` | netstat=`netstat -tu` | ||
eth0_rx=`ifconfig eth0 | grep "bytes" | awk '{print $1 " " $2 " " $3 " " $4}'` | eth0_rx=`ifconfig eth0 | grep "bytes" | awk '{print $1 " " $2 " " $3 " " $4}'` | ||
eth0_tx=`ifconfig eth0 | grep "bytes" | awk '{print $5 " " $6 " " $7 " " $8}'` | eth0_tx=`ifconfig eth0 | grep "bytes" | awk '{print $5 " " $6 " " $7 " " $8}'` | ||
hostname=`hostname` | hostname=`hostname -s` | ||
hours1=`/usr/syno/bin/smartctl -A /dev/hda | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` | hours1=`/usr/syno/bin/smartctl -A /dev/hda | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` | ||
hours2=`/usr/syno/bin/smartctl -A /dev/hdb | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` | hours2=`/usr/syno/bin/smartctl -A /dev/hdb | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` | ||
hours3=`/usr/syno/bin/smartctl -A /dev/hdc | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` | hours3=`/usr/syno/bin/smartctl -A /dev/hdc | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` | ||
hours4=`/usr/syno/bin/smartctl -A /dev/hdd | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` | hours4=`/usr/syno/bin/smartctl -A /dev/hdd | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` | ||
temperatur1=`/usr/syno/bin/smartctl -A /dev/hda | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` | temperatur1=`/usr/syno/bin/smartctl -A /dev/hda | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` | ||
temperatur2=`/usr/syno/bin/smartctl -A /dev/hdb | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` | temperatur2=`/usr/syno/bin/smartctl -A /dev/hdb | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` | ||
temperatur3=`/usr/syno/bin/smartctl -A /dev/hdc | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` | temperatur3=`/usr/syno/bin/smartctl -A /dev/hdc | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` | ||
temperatur4=`/usr/syno/bin/smartctl -A /dev/hdd | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` | temperatur4=`/usr/syno/bin/smartctl -A /dev/hdd | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` | ||
filesystem1=`df -h | grep /opt | awk '{print $6}'` | filesystem1=`df -h | grep /opt | awk '{print $6}'` | ||
size1=`df -h | grep /opt | awk '{print $2}'` | size1=`df -h | grep /opt | awk '{print $2}'` | ||
used1=`df -h | grep /opt | awk '{print $3}'` | used1=`df -h | grep /opt | awk '{print $3}'` | ||
available1=`df -h | grep /opt | awk '{print $4}'` | available1=`df -h | grep /opt | awk '{print $4}'` | ||
percent1=`df -h | grep /opt | awk '{print $5}'` | percent1=`df -h | grep /opt | awk '{print $5}'` | ||
datum=`date +"%d.%m.%y` | datum=`date +"%d.%m.%y` | ||
zeit=`date +"%H:%M` | zeit=`date +"%H:%M` | ||
up_time=`uptime` | up_time=`uptime | sed 's/^.*up //' | sed 's/, load.*$//'` | ||
CPU=`/usr/bin/top -b -n 1 |awk 'NR>7&&NR<30 {s+=$9} END {printf("%2d",s)}'` | |||
INT_IP=`ifconfig eth0 | grep inet | sed 's/^ *..........//' | sed 's/ .*$//' | sed 's/:$//'` | |||
IP=`if [ -f /tmp/externalIP.result ];then /bin/get_key_value /tmp/externalIP.result externalIP;else echo 0.0.0.0;fi` | |||
FREE=`free` | |||
MEM=`echo "$FREE" | awk 'NR==2{printf("%2d",$3/$2*100)}'` | |||
SWAP=`echo "$FREE" | awk 'NR==3{printf("%2d",$3/$2*100)}'` | |||
IQ=`cat /var/spool/syno_indexing_queue* | wc -l`; IQ1=100; if [ $IQ -lt 100 ]; then IQ1=$IQ; fi | |||
TQ=`cat /var/spool/thumb_create.queue* | wc -l`; TQ1=100; if [ $TQ -lt 100 ]; then TQ1=$TQ; fi | |||
FQ=`cat /var/spool/flv_create_queue* | wc -l`; FQ1=100; if [ $FQ -lt 100 ]; then FQ1=$FQ; fi | |||
MSG=`tail -1 /var/log/messages` | |||
LASTMSG=`echo $MSG | cut -b 1-78` | |||
WEATHER=`wget -O - "http://www.google.com/ig/api?weather="$LOCATION 2>/dev/null` | |||
TEMP=`echo $WEATHER | sed -e 's/^.*temp_c data=\"\\([0-9-][0-9\]*\\)\".*/\\1/'` | |||
COND=`echo $WEATHER | sed -e 's/^.*condition data="\(.*\)".*/\\1/'` | |||
HUM=`echo $WEATHER | sed -e 's/^.*humidity data="Humidity:\(.*\)%.*/\\1/'` | |||
log() { | log() { | ||
echo `date +%c`: $1 >> $LOGFILE | |||
} | } | ||
log "Temperatur 1: $temperatur1 °C, Temperatur 2: $temperatur2 °C, Temperatur 3: $temperatur3 °C, Temperatur 4: $temperatur4 °C, IP: $IP" | |||
nachricht="Status der Diskstation ($hostname ($model)) vom $datum ($zeit): | |||
-------------------------------------------- | |||
log "Temperatur 1: $temperatur1 °C, Temperatur 2: $temperatur2 °C, Temperatur 3: $temperatur3 °C, | |||
nachricht="Status der $hostname ($model) vom $datum ($zeit): | |||
[Speicherplatz in TB] | [Speicherplatz in TB] | ||
Groesse Datentraeger: $size1 | Groesse Datentraeger: $size1 | ||
Freier Speicher: $available1 | Freier Speicher: $available1 | ||
Belegter Speicher: $used1 ($percent1) | Belegter Speicher: $used1 ($percent1) | ||
[Auslastung] | |||
CPU-Auslastung: ${CPU}% | |||
Memory: ${MEM}% | |||
Swap: ${SWAP}% | |||
Indexing Queue: $IQ | |||
Thumbs Queue: $TQ | |||
FLV Queue: $FQ | |||
[Datentraeger] | [Datentraeger] | ||
Zeile 138: | Zeile 172: | ||
[IP] | [IP] | ||
Externe IP: $IP | Externe IP: $IP | ||
Interne IP: $INT_IP | |||
[Aktuelle Netzwerkverbindungen] | [Aktuelle Netzwerkverbindungen] | ||
$netstat | $netstat | ||
[Netzwerkstatistik eth0] | [Netzwerkstatistik eth0] | ||
$eth0_rx | $eth0_rx | ||
$eth0_tx | $eth0_tx | ||
[Uptime] | [Uptime] | ||
Uptime: $up_time | Uptime:$up_time Stunden | ||
[Wetter] | |||
Temperatur: ${TEMP} Grad C | |||
Luftfeuchtigkeit:${HUM}% | |||
Vorhersage: $COND | |||
[Letzte Nachrichten] | |||
$LASTMSG | |||
" | " | ||
echo "$nachricht" | /opt/bin/nail -s " | echo "$nachricht" | /opt/bin/nail -s "Status Diskstation" USER.USER@PROVIDER.de | ||
echo 2 >/dev/ttyS1 | |||
</pre> | </pre> | ||
Aktuelle Version vom 26. Januar 2018, 14:06 Uhr
Die Installation von Fremdsoftware erfolgt immer auf eigenes Risiko. Fehler bei der Installation können zum Datenverlust und zur Neuinstallation der Diskstation führen, daher erfolgen sämtliche Änderungen auf eigenes Risiko.
In diesem Artikel geht es darum der Diskstation zu ermöglichen z.B. täglich eine Statusmail mit diversen Infos zu verschicken.
Grundsätzlich kann diese Möglichkeit allerdings zum Versenden von allen möglichen Infos/Warnungen per E-Mail genutzt werden.
Voraussetzungen
Generell sollte mal wissen
- wie man sich per Telnet/SSH auf die DS einloggt
- wie man den vi-Editor bedient, alternativ den Editor des AdminTool
Hinweis
Die versendete Statusmail sieht als Beispiel so aus:
Status der Diskstation (Nas (DS-410j)) vom 09.09.11 (13:25): -------------------------------------------- [Speicherplatz in TB] Groesse Datentraeger: 5.4T Freier Speicher: 688.6G Belegter Speicher: 4.7T (87%) [Auslastung] CPU-Auslastung: 0% Memory: 86% Swap: 1% Indexing Queue: 2 Thumbs Queue: 0 FLV Queue: 0 [Datentraeger] Volume 1: 41 Grad, 7818 Stunden Laufzeit Volume 2: 42 Grad, 7808 Stunden Laufzeit Volume 3: 42 Grad, 7962 Stunden Laufzeit Volume 4: 41 Grad, 7803 Stunden Laufzeit [IP] Externe IP: 69.15.45.4 Interne IP: 192.168.178.25 [Aktuelle Netzwerkverbindungen] Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 Nas:5000 maze128.fritz.box:33057 ESTABLISHED tcp 0 0 Nas:5000 maze128.fritz.box:33050 ESTABLISHED tcp 0 0 Nas:5000 maze128.fritz.box:33056 ESTABLISHED tcp 0 0 Nas:5000 maze128.fritz.box:33054 ESTABLISHED [Netzwerkstatistik eth0] RX bytes:1375702476 (1.2 GiB) TX bytes:43629973 (41.6 MiB) [Uptime] Uptime: 2:08 Stunden [Wetter] Temperatur: 20 Grad C Luftfeuchtigkeit: 73% Vorhersage: Mostly Sunny [Letzte Nachrichten] Sep 9 13:14:24 synoindexd: audio_parse.cpp (134) FAILED TO WRITE PIC FILE
Installation
Für das Versenden der E-Mails habe ich für die DS extra einen Account bei web.de angelegt und mit folgender Konfiguration in der nail.rc betrieben, die Datei liegt in /opt/etc/ (ich habe die Datei mit dem Editor aus itaris AdminTool editiert, funktioniert super!):
set smtp-auth=login set smtp=smtp.web.de set pop=pop3.web.de set from=BENUTZER@web.de set smtp-auth-user=BENUTZER@web.de set smtp-auth-password=PASSWORT
Ich habe dann ein Script erstellt welches ich unter /usr/bin abgelegt habe (der Pfad ist relativ egal). Dieses wird 1x täglich per Cron gestartet (z.B. per CronTab)
Erstellen des Scripts
Das Script muss je nach Version der Diskstation noch angepasst werden, besonders die Werte $hours und $temperatur. Daher diese Werte am besten vorher mal im Terminal ausprobieren und schauen ob bei dem verwendeten Befehl etwas Sinnvolles raus kommt.
In diesem Script wird zusätzlich noch ein log-file angelegt um sich eventuell den Temperaturverlauf im Nachhinein anzusehen.
#!/bin/sh LOCATION='MEINE_STADT' LOGFILE=/var/log/shutdown.log echo 6 > /dev/ttyS1 echo 7 > /dev/ttyS1 model=`dmesg | grep -m 1 Model | awk '{print $4}'` netstat=`netstat -tu` eth0_rx=`ifconfig eth0 | grep "bytes" | awk '{print $1 " " $2 " " $3 " " $4}'` eth0_tx=`ifconfig eth0 | grep "bytes" | awk '{print $5 " " $6 " " $7 " " $8}'` hostname=`hostname -s` hours1=`/usr/syno/bin/smartctl -A /dev/hda | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` hours2=`/usr/syno/bin/smartctl -A /dev/hdb | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` hours3=`/usr/syno/bin/smartctl -A /dev/hdc | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` hours4=`/usr/syno/bin/smartctl -A /dev/hdd | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'` temperatur1=`/usr/syno/bin/smartctl -A /dev/hda | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` temperatur2=`/usr/syno/bin/smartctl -A /dev/hdb | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` temperatur3=`/usr/syno/bin/smartctl -A /dev/hdc | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` temperatur4=`/usr/syno/bin/smartctl -A /dev/hdd | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'` filesystem1=`df -h | grep /opt | awk '{print $6}'` size1=`df -h | grep /opt | awk '{print $2}'` used1=`df -h | grep /opt | awk '{print $3}'` available1=`df -h | grep /opt | awk '{print $4}'` percent1=`df -h | grep /opt | awk '{print $5}'` datum=`date +"%d.%m.%y` zeit=`date +"%H:%M` up_time=`uptime | sed 's/^.*up //' | sed 's/, load.*$//'` CPU=`/usr/bin/top -b -n 1 |awk 'NR>7&&NR<30 {s+=$9} END {printf("%2d",s)}'` INT_IP=`ifconfig eth0 | grep inet | sed 's/^ *..........//' | sed 's/ .*$//' | sed 's/:$//'` IP=`if [ -f /tmp/externalIP.result ];then /bin/get_key_value /tmp/externalIP.result externalIP;else echo 0.0.0.0;fi` FREE=`free` MEM=`echo "$FREE" | awk 'NR==2{printf("%2d",$3/$2*100)}'` SWAP=`echo "$FREE" | awk 'NR==3{printf("%2d",$3/$2*100)}'` IQ=`cat /var/spool/syno_indexing_queue* | wc -l`; IQ1=100; if [ $IQ -lt 100 ]; then IQ1=$IQ; fi TQ=`cat /var/spool/thumb_create.queue* | wc -l`; TQ1=100; if [ $TQ -lt 100 ]; then TQ1=$TQ; fi FQ=`cat /var/spool/flv_create_queue* | wc -l`; FQ1=100; if [ $FQ -lt 100 ]; then FQ1=$FQ; fi MSG=`tail -1 /var/log/messages` LASTMSG=`echo $MSG | cut -b 1-78` WEATHER=`wget -O - "http://www.google.com/ig/api?weather="$LOCATION 2>/dev/null` TEMP=`echo $WEATHER | sed -e 's/^.*temp_c data=\"\\([0-9-][0-9\]*\\)\".*/\\1/'` COND=`echo $WEATHER | sed -e 's/^.*condition data="\(.*\)".*/\\1/'` HUM=`echo $WEATHER | sed -e 's/^.*humidity data="Humidity:\(.*\)%.*/\\1/'` log() { echo `date +%c`: $1 >> $LOGFILE } log "Temperatur 1: $temperatur1 °C, Temperatur 2: $temperatur2 °C, Temperatur 3: $temperatur3 °C, Temperatur 4: $temperatur4 °C, IP: $IP" nachricht="Status der Diskstation ($hostname ($model)) vom $datum ($zeit): -------------------------------------------- [Speicherplatz in TB] Groesse Datentraeger: $size1 Freier Speicher: $available1 Belegter Speicher: $used1 ($percent1) [Auslastung] CPU-Auslastung: ${CPU}% Memory: ${MEM}% Swap: ${SWAP}% Indexing Queue: $IQ Thumbs Queue: $TQ FLV Queue: $FQ [Datentraeger] Volume 1: $temperatur1 Grad, $hours1 Stunden Laufzeit Volume 2: $temperatur2 Grad, $hours2 Stunden Laufzeit Volume 3: $temperatur3 Grad, $hours3 Stunden Laufzeit Volume 4: $temperatur4 Grad, $hours4 Stunden Laufzeit [IP] Externe IP: $IP Interne IP: $INT_IP [Aktuelle Netzwerkverbindungen] $netstat [Netzwerkstatistik eth0] $eth0_rx $eth0_tx [Uptime] Uptime:$up_time Stunden [Wetter] Temperatur: ${TEMP} Grad C Luftfeuchtigkeit:${HUM}% Vorhersage: $COND [Letzte Nachrichten] $LASTMSG " echo "$nachricht" | /opt/bin/nail -s "Status Diskstation" USER.USER@PROVIDER.de echo 2 >/dev/ttyS1
Die Nachricht könnt ihr noch nach Belieben anpassen, allerdings funktionieren nur folgende Zeichen:
LEERZEICHEN ␣!"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ `abcdefghijklmnopqrstuvwxyz{|}~
Ende
Diese Möglichkeit zum Versenden von Informationen kann wie bereits angesprochen für alle möglichen Dinge auf der DS genutzt werden, ich nutze es z.B. auch für die Überwachung der Temperatur und zum Versenden einer E-Mail als Warnung wenn ein bestimmter Schwellenwert überschritten ist.
Ich hoffe ich konnte dem ein oder anderen helfen, vielleicht kommt sogar die ein oder andere neue Idee zum modden der Diskstation auf.