Statusmail von der Diskstation: Unterschied zwischen den Versionen

Aus
 
(7 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 Möglichen Infos/Warnungen per E-Mail genutzt werden.
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 DiskStation (DS-209) vom 02.10.10 (15:21):
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: 1.1T
Freier Speicher: 688.6G
Belegter Speicher: 4.3T (81%)
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: 40 Grad Celsius, 2339 Stunden Laufzeit
Volume 1: 41 Grad, 7818 Stunden Laufzeit
Volume 2: 42 Grad Celsius, 2331 Stunden Laufzeit
Volume 2: 42 Grad, 7808 Stunden Laufzeit
Volume 3: 42 Grad Celsius, 2487 Stunden Laufzeit
Volume 3: 42 Grad, 7962 Stunden Laufzeit
Volume 4: 41 Grad Celsius, 2330 Stunden Laufzeit
Volume 4: 41 Grad, 7803 Stunden Laufzeit


[IP]
[IP]
Externe IP: 12.34.56.78
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           Foreign Address         State      
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp       0     0 DiskStation:ssh        12.34.56.78:51324    ESTABLISHED  
tcp 0 0 Nas:5000 maze128.fritz.box:33057 ESTABLISHED
tcp       0     0 DiskStation:afpovertcp  12.34.56.78:49155    ESTABLISHED  
tcp 0 0 Nas:5000 maze128.fritz.box:33050 ESTABLISHED
tcp       0     0 localhost:47627        localhost:4700          ESTABLISHED  
tcp 0 0 Nas:5000 maze128.fritz.box:33056 ESTABLISHED
tcp       0     0 DiskStation:ssh        12.34.56.78:51500    ESTABLISHED
tcp 0 0 Nas:5000 maze128.fritz.box:33054 ESTABLISHED
tcp        0      0 localhost:4700          localhost:47627        ESTABLISHED
tcp        0      0 localhost:36696        localhost:4700          ESTABLISHED
tcp        0      0 localhost:4700          localhost:36696        ESTABLISHED  


[Netzwerkstatistik eth0]
[Netzwerkstatistik eth0]
RX bytes:2092988773 (1.9 GiB)
RX bytes:1375702476 (1.2 GiB)
TX bytes:3983655871 (3.7 GiB)
TX bytes:43629973 (41.6 MiB)


[Uptime]
[Uptime]
Uptime: 14:00:52 up 1:20, 1 user, load average: 0.34, 0.13, 0.07
Uptime: 2:08 Stunden
CPU-Auslastung: 0.0%
 
[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 sinnvolles raus
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_auslastung=`top -n1 | grep -m 1 CPU | awk '{print $6}'`
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
echo `date +%c`: $1 >> $LOGFILE
}
}
/usr/syno/sbin/ddnsd -e
log "Temperatur 1: $temperatur1 °C, Temperatur 2: $temperatur2 °C, Temperatur 3: $temperatur3 °C, Temperatur 4: $temperatur4 °C, IP: $IP"
. /tmp/externalIP.result
nachricht="Status der Diskstation ($hostname ($model)) vom $datum ($zeit):
IP=$externalIP                                                                                                                                                                                                                                                       
--------------------------------------------
log "Temperatur 1: $temperatur1 °C, Temperatur 2: $temperatur2 °C, Temperatur 3: $temperatur3 °C,
Temperatur 4: $temperatur4 °C, IP: $IP"
 
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]
Volume 1: $temperatur1 Grad Celsius, $hours1 Stunden Laufzeit
Volume 1: $temperatur1 Grad, $hours1 Stunden Laufzeit
Volume 2: $temperatur2 Grad Celsius, $hours2 Stunden Laufzeit
Volume 2: $temperatur2 Grad, $hours2 Stunden Laufzeit
Volume 3: $temperatur3 Grad Celsius, $hours3 Stunden Laufzeit
Volume 3: $temperatur3 Grad, $hours3 Stunden Laufzeit
Volume 4: $temperatur4 Grad Celsius, $hours4 Stunden Laufzeit
Volume 4: $temperatur4 Grad, $hours4 Stunden Laufzeit


[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
CPU-Auslastung: $cpu_auslastung
 
[Wetter]
Temperatur: ${TEMP} Grad C
Luftfeuchtigkeit:${HUM}%
Vorhersage: $COND
 
[Letzte Nachrichten]
$LASTMSG


"
"
echo "$nachricht" | /opt/bin/nail -s "EMAIL-BETREFF" ZIELUSER@PROVIDER.de
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

  • IPKG muss installiert sein
  • nail [1] muss installiert sein zum Versenden von E-Mails

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.