Abhängigkeiten installieren
Sollten Sie den xinetd und den Basic Calculator bc noch nicht installiert haben, sollten Sie dies jetzt nachholen.
Code: Alles auswählen
apt-get update
apt-get install xinetd bc
Erstellen Sie anschließend ein Shell-Skript welches die gewünschten Informationen zusammensammelt und auf der Standardausgabe zurückgibt.
Code: Alles auswählen
nano /usr/bin/systemdata.sh
Code: Alles auswählen
#!/bin/bash
###########################################################################
## ##
## Collect System Data ##
## ##
## Creation: 17.02.2013 ##
## Last Update: 30.07.2013 ##
## ##
###########################################################################
round() {
[ ! -z "$2" ] && R=$2 || R=3
[ $1 == 0 ] && echo $1 || echo $(printf %.${R}f $1);
}
format_uptime() {
seconds=$1
UPTIME=""
secs=$(expr $seconds % 60)
mins=$(expr $seconds / 60 % 60)
hours=$(expr $seconds / 3600 % 20)
days=$(expr $seconds / 86400)
if [ "$days" -gt 0 ]; then
[ "$days" == 1 ] && UPTIME="$days day" || UPTIME="$days days"
fi
if [ "$hours" -gt 0 ]; then
[ "$days" -gt 0 ] && UPTIME+=", "
[ "$hours" == 1 ] && UPTIME+="$hours hour" || UPTIME+="$hours hours"
fi
if [ "$mins" -gt 0 ]; then
[[ "$hours" -gt 0 || "$days" -gt 0 ]] && UPTIME+=", "
[ "$mins" == 1 ] && UPTIME+="$mins minute" || UPTIME+="$mins minutes"
fi
if [ "$secs" -gt 0 ]; then
[[ "$mins" -gt 0 || "$hours" -gt 0 || "$days" -gt 0 ]] && UPTIME+=", "
[ "$secs" == 1 ] && UPTIME+="$secs second" || UPTIME+="$secs seconds"
fi
echo "$UPTIME"
}
# Read uptime in seconds
echo -n "Uptime: "
secs=$(cat /proc/uptime | awk -F '.' '{print $1}')
[ ! -z "$1" ] && echo $secs || echo $(format_uptime $secs)
# Read current CPU temperature
echo -n "CPU Temperature: "
echo "scale=1; $(cat /sys/class/thermal/thermal_zone0/temp | awk -F ' ' '{print $1}') / 1000" | bc -l
# Read current GPU temperature
echo -n "GPU Temperature: "
/opt/vc/bin/vcgencmd measure_temp | sed -e "s/temp=//" -e "s/'C//g"
# Read firmware version
echo -n "Firmware: "
/opt/vc/bin/vcgencmd version | grep version | awk '{print $2}'
# Read CPU usage
echo -n "CPU Usage: "
#top -b -n2 -d1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}' | tail -n1
read -a CPU < /proc/stat
unset CPU[0]
CPU=("${CPU[@]}")
IDLE=${CPU[3]}
TOTAL=0
for t in "${CPU[@]}"; do ((TOTAL+=t)); done
DIFF_TOTAL=$(echo "scale=10; $TOTAL - ${PREV_CPU_TOTAL:-0}" | bc)
DIFF_IDLE=$(echo "scale=10; $IDLE - ${PREV_CPU_IDLE:-0}" | bc)
USAGE=$(echo "scale=10; 1000 * $(($DIFF_TOTAL - $DIFF_IDLE)) / $DIFF_TOTAL + 5" | bc)
USAGE=$(echo "scale=10; $USAGE / 10" | bc)
for i in ${!CPU[*]}; do
[[ ${CPU[$i]} == 0 ]] && OUT_INT[$i]=0 && continue
OUT_INT[$i]=$(echo "scale=10; 1000 * (${CPU[$i]} - ${PREV_CPU_STAT[$i]:-0}) / $DIFF_TOTAL + 5" | bc)
OUT_INT[$i]=$(echo "scale=10; ${OUT_INT[$i]} / 10" | bc)
done
User=$(round $(echo ${OUT_INT[0]} | tr "." ","))
System=$(round $(echo ${OUT_INT[2]} | tr "." ","))
Nice=$(round $(echo ${OUT_INT[1]} | tr "." ","))
Idle=$(round $(echo ${OUT_INT[3]} | tr "." ","))
Usage=$(round $(echo $USAGE | tr "." ","))
echo "$Usage% (User: $User% System: $System% Nice: $Nice% Idle: $Idle%)"
export PREV_CPU_STAT=("${CPU[@]}")
export PREV_CPU_IDLE=$IDLE
export PREV_CPU_TOTAL=$TOTAL
exit 0
Code: Alles auswählen
chmod 0755 /usr/bin/systemdata.sh
Code: Alles auswählen
/usr/bin/systemdata.sh
Uptime: 3 hours, 21 minutes, 42 seconds
CPU Temperature: 46.5
GPU Temperature: 47.1
Firmware: 367974
CPU Usage: 6.550% (User: 3.715% System: 2.836% Nice: 0% Idle: 93.450%)
Erstellen Sie jetzt eine neue Konfigurationsdatei für den xinetd.
Code: Alles auswählen
nano /etc/xinetd.d/systemdata
Code: Alles auswählen
service systemdata
{
disable = no
socket_type = stream
port = 5180
protocol = tcp
wait = no
user = root
server = /bin/bash
server_args = /usr/bin/systemdata.sh
log_on_failure += USERID
}
Code: Alles auswählen
nano /etc/services
Code: Alles auswählen
systemdata 5180/tcp
Code: Alles auswählen
/etc/init.d/xinetd restart
Ob soweit alles wie erwartet funktioniert können Sie mit Telnet auf einem zweiten Rechner überprüfen.
Code: Alles auswählen
telnet raspberrypi.home.lan 5180
Trying 192.168.10.52...
Connected to raspberrypi.home.lan.
Escape character is '^]'.
Uptime: 15276
CPU Temperature: 46.5
GPU Temperature: 46.5
Firmware: 367974
CPU Usage: 3.7%
Connection closed by foreign host.
Code: Alles auswählen
nc localhost 5180
Uptime: 15279
CPU Temperature: 46.5
GPU Temperature: 46.5
Firmware: 367974
CPU Usage: 3.9%
Informationen in PHP verarbeiten
Wenn Sie die über den Service systemdata bereitgestellten Informationen in PHP einlesen und verarbeiten wollen, hilft Ihnen eventuell der folgende Beispiel-Code.
Code: Alles auswählen
<?php
$fp = fsockopen("raspberrypi.home.lan",5180);
while($string = fgets($fp))
{
echo $string;
}
?>
quelle: http://www.gtkdb.de/index_7_2105.html