2016-04-09 8 views
0

Also ich möchte dieses Skript kontinuierlich im Hintergrund laufen. Ich konnte es beim Booten starten und dann ausführen, aber nach einiger Zeit hört es auf zu laufen. Was ist los mit dir?Running Bash Shell Script kontinuierlich vom Start im Hintergrund. (Raspberry Pi)

#!/bin/sh 

### BEGIN INIT INFO 
# Provides:   myfirst 
# Required-Start: $network 
# Required-Stop:  
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: myfirst 
# Description:  Speaker switch 
### END INIT INFO 


echo "18" > /sys/class/gpio/export 
echo "out" > /sys/class/gpio/gpio18/direction 

while true;do 
     ps cax | grep hairtunes > /dev/null 
     if [ $? -eq 0 ]; then 
     echo "0" > /sys/class/gpio/gpio18/value 
     else 
     echo "1" > /sys/class/gpio/gpio18/value 
     fi 
     sleep 5 
done 

exit 0 
+0

Wie starten Sie es? von /etc/init.d/? rc.local? und welche Distro benutzt du? –

+0

Von /etc/init.d Ich laufe raspbian. –

+0

Aktivieren Sie Core-Dumps auf Raspbian, wenn der Prozess abstürzt, können Sie den Dump analysieren und mehr Informationen erhalten, was falsch ist. – ivanzg

Antwort

0

Sie sollten while-Schleife innerhalb Initskript nicht ausführen. Init wird lang laufende Initscripte löschen. Sie können

echo "18" > /sys/class/gpio/export 
echo "out" > /sys/class/gpio/gpio18/direction 

while true;do 
     ps cax | grep hairtunes > /dev/null 
     if [ $? -eq 0 ]; then 
     echo "0" > /sys/class/gpio/gpio18/value 
     else 
     echo "1" > /sys/class/gpio/gpio18/value 
     fi 
     sleep 5 
done 

in separate Scrip alle Logik extrahieren und mit & von initscipt laufen. Gefällt mir:

#!/bin/sh 

### BEGIN INIT INFO 
# Provides:   myfirst 
# Required-Start: $network 
# Required-Stop:  
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: myfirst 
# Description:  Speaker switch 
### END INIT INFO 

case "$1" in 
    start) 
    /path/to/the/script/above/with/logic.sh & 
    ;; 
    stop) 
    # you need to store pid to do this 
    ;; 
    *) 
    echo "Usage: $0 {start|stop}" 
    exit 1 
    ;; 
esac 

Dies sollte funktionieren. Dies ist jedoch keine optimale Lösung. Das beste ist es, den Prozess, der etwas anderes Thema ist, korrekt zu dämonisieren.