Sono curioso di sapere quale sia questa differenza tra i programmi; iniziato con systemd quando abilitato tramite systemctl, rispetto a quelli avviati tramite /etc/rc.localo tramite l' interfaccia della riga di comando .
Ad esempio, recentemente stavo usando shairport-sync per il raspberry pi. Inizialmente, ho impostato shairport-sync per iniziare tramite shadoport-sync abilitato sudo systemctl.
Più tardi lungo la strada ho usato una funzionalità all'interno shairport-syncper eseguire script prima e inviare ai dispositivi di connessione.
Con mia sorpresa, gli script eseguiti da shairport-syncnon lo hanno fatto kill arecordoaplay
Tuttavia, quando eseguivo lo script tramite terminale, lo script veniva eseguito, ucciso arecorde aplay.
Per confondermi ulteriormente, l'ho ucciso shairport-synce avviato tramite terminale per vedere l'output di ciò che stava accadendo. Quando l'ho fatto, gli script hanno funzionato come mi aspettavo quando il dispositivo si è collegato, ucciso arecorde aplay. Così, come una correzione ho disabilitato shairport-syncin sysmtectle impostarlo per l'esecuzione in /etc/rc.localcome una soluzione rapida. Dopo rebootche ha funzionato come mi aspettavo.
Questo mi porta a credere che ci sia qualche differenza tra un programma eseguito a parte systemde un programma che viene eseguito quando avviato tramite /etc/rc.localo l'interfaccia della riga di comando.
Perché succede? È a causa di diversi livelli di esecuzione? Qualche magia oscura?
Lo script che viene eseguito quando un dispositivo si connette shairport-syncè il seguente: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
Ecco lo script di dissolvenza: 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
Lo script che viene eseguito quando un dispositivo si disconnette shairport-syncè il seguente: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
Ho trovato il seguente errore nel /var/log/syslogsolo quando shairport-sync è stato inizialmente eseguito separatamente systemd. Quando è shairport-syncstato eseguito dalla CLI o /etc/rc.localnon erano presenti errori.
Jan 24 00:38:45 raspberrypi shairport-sync[617]: sudo: no tty present and no askpass program specified
Si noti che l'unica differenza è come shairport-syncviene avviato inizialmente, quando i dispositivi si connettono o si disconnettono shairport-synccontinuano a funzionare.
/home/pi/shScripts/shairportfade.sh?
rc.local
ps ... awk ... grep ...roba potrebbe essere sostituita da una più semplicepkill