Für das
hier behandelte Problem habe ich diese Script gebastelt, dass abhänging von der CPU-Usage eines Prozesses ein GPIO (über wiringPi) schaltet:
Bash
#!/bin/bash
gpio -g mode 17 out # GPIO 17 auf Output stellen (wiringPI erforderlich)
while true
do
pid=`less /var/run/mpd/pid` #in diese Datei schreibt mpd seine Prozess-ID (pid) -> siehe mpd.conf
nulllast=0
for i in 1 2 3 4 5 6 7 8 9 10
#10 Durchläufe, da %CPU von mpd auch bei Wiedergabe 0,0 sein kann. Muss im Dauertest evtl. optimiert werden!
#Ziel: Verzögerung des Relais beim Beginn der Wiedergabe möglichst klein aber keine fälschliches Ausschalten.
do
load=`top -p $pid -n1 | awk 'FNR==8{print $10}'` #top nur für die mpd-pid ein mal (-n1) ausgeben, awk holt aus der 8. Zeile das 10. Feld (%CP$
if [ "$load" = "0,0" ] #nulllast inkrementieren wenn CPU Usage 0,0 ist.
then
nulllast=$((nulllast+1))
fi
done
if [ $nulllast -le 8 ] #wenn mind. 2 der 10 Durchgänge eine Usage von > 0 haben, Relais an (=max. 8 mal 0% Usage sein) --> Anpassen, siehe oben!
then
gpio -g write 17 1 #GPIO 17 auf high
else
gpio -g write 17 0 #GPIO 17 auf low
fi
done
Alles anzeigen
Das Ganze funktioniert perfekt wenn ich das Script einfach im Vordergrund laufen lasse. Ich möchte es aber mit " &" im Hintergrund laufen lassen. Dann funktioniert es jedoch nicht (schaltet nicht).
Habe auch mit screen und nohup rumprobiert.
Bin allerdings auch absoluter Anfänger...
Jemand eine Idee?