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.local
oder ü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-sync
nicht kill
arecord
oderaplay
Wenn ich das Skript jedoch über das Terminal ausführen würde, würde das Skript ausgeführt und getötet arecord
und aplay
.
Um mich weiter zu verwirren, habe ich es getötet shairport-sync
und ü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 arecord
und aplay
. So, wie ein Fix ich deaktiviert shairport-sync
in sysmtectl
und legen Sie es in laufen /etc/rc.local
als eine schnelle Lösung. Nach einem reboot
funktionierte es wie erwartet.
Dies lässt mich glauben, dass es einen Unterschied zwischen einem Programm gibt, das getrennt von ausgeführt wird, systemd
und einem Programm, das ausgeführt wird, wenn es über /etc/rc.local
oder ü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-sync
lautet 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-sync
lautet 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/syslog
nur dann gefunden, wenn shairport-sync ursprünglich als getrennt von ausgeführt wurde systemd
. Wann shairport-sync
wurde von der CLI ausgeführt oder /etc/rc.local
es 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-sync
Start 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