Ich bin gespannt, was dieser Unterschied zwischen Programmen ist, die sind; wurde mit systemd gestartet, wenn es über systemctl aktiviert wurde, im Vergleich zu denen, die mit /etc/rc.localoder über die CLI gestartet wurden .
Zum Beispiel habe ich kürzlich Shairport-Sync für den Himbeer-Pi verwendet. Zunächst habe ich shairport-sync so eingestellt, dass es mit sudo systemctl-fähiger shairport-sync startet.
Später verwendete ich eine Funktion shairport-sync, um Skripte vor und nach dem Verbinden auf Geräten auszuführen.
Zu meiner Überraschung haben die Skripte bei der Ausführung von shairport-syncnicht kill arecordoderaplay
Wenn ich das Skript jedoch über das Terminal ausführen würde, würde das Skript ausgeführt und getötet arecordund aplay.
Um mich weiter zu verwirren, habe ich es getötet shairport-syncund über das Terminal gestartet, um die Ausgabe des Geschehens zu sehen. Als ich das tat, funktionierten die Skripte wie erwartet, als das Gerät verbunden und getötet wurde arecordund aplay. So, wie ein Fix ich deaktiviert shairport-syncin sysmtectlund legen Sie es in laufen /etc/rc.localals eine schnelle Lösung. Nach einem rebootfunktionierte es wie erwartet.
Dies lässt mich glauben, dass es einen Unterschied zwischen einem Programm gibt, das getrennt von ausgeführt wird, systemdund einem Programm, das ausgeführt wird, wenn es über /etc/rc.localoder über die CLI gestartet wird .
Warum passiert das? Liegt das an unterschiedlichen Laufstufen? Dunkle Magie?
Das Skript, das ausgeführt wird, wenn ein Gerät eine Verbindung herstellt, shairport-synclautet wie folgt:shairportstart.sh
#!/bin/sh
/usr/bin/sudo /bin/pkill arecord
if [ $(date +%H) -ge "18" -o $(date +%H) -le "7" ]; then
/usr/bin/amixer set Speaker 40%
else
/usr/bin/amixer set Speaker 100%
fi
/home/pi/shScripts/shairportfade.sh&
exit 0
Hier ist das Fade-Skript: shairportfade.sh
#!/bin/sh
/usr/bin/amixer set Speaker 30-
for (( i=0; i<30; i++))
do
/usr/bin/amixer set Speaker 1+
done
exit 0
Das Skript, das ausgeführt wird, wenn eine Verbindung zu einem Gerät getrennt wird, shairport-synclautet wie folgt:shairportend.sh
#!/bin/sh
/usr/bin/amixer set Speaker 70%
/usr/bin/arecord -D plughw:1 -f dat | /usr/bin/aplay -D plughw:1 -f dat&
exit 0
Ich habe den folgenden Fehler /var/log/syslognur dann gefunden, wenn shairport-sync ursprünglich als getrennt von ausgeführt wurde systemd. Wann shairport-syncwurde von der CLI ausgeführt oder /etc/rc.locales waren keine Fehler vorhanden.
Jan 24 00:38:45 raspberrypi shairport-sync[617]: sudo: no tty present and no askpass program specified
Bitte beachten Sie, dass der einzige Unterschied darin besteht, wie der shairport-syncStart gestartet wird, wenn Geräte verbunden oder getrennt werden shairport-sync.
/home/pi/shScripts/shairportfade.sh?
rc.local
ps ... awk ... grep ...Zeug könnte durch ein einfacheres ersetzt werdenpkill