Je suis curieux de savoir quelle est cette différence entre les programmes qui le sont; démarré avec systemd lorsqu'il est activé via systemctl, par rapport à ceux démarrés via /etc/rc.localou via la CLI.
Par exemple, j'utilisais récemment shairport-sync pour le raspberry pi. Initialement, j'ai défini shairport-sync pour démarrer au moyen de sudo systemctl activé shairport-sync.
Plus tard sur la route, j'ai utilisé une fonctionnalité à l'intérieur shairport-syncpour exécuter des scripts avant et poster sur les appareils se connectant.
À ma grande surprise, les scripts lorsqu'elles sont exécutées par shairport-syncne pas kill arecordouaplay
Cependant, lorsque j'exécutais le script via un terminal, le script était exécuté et tué arecordet aplay.
Pour m'embrouiller davantage, je l'ai tué shairport-syncet démarré via le terminal pour voir la sortie de ce qui se passait. Quand je l'ai fait, les scripts ont fonctionné comme je m'y attendais lorsque l'appareil s'est connecté et tué arecordet aplay. Donc, comme j'ai désactivé fix shairport-syncdans sysmtectlet mis à fonctionner en /etc/rc.localtant que solution rapide. Après rebootça a fonctionné comme je m'y attendais.
Cela m'amène à croire qu'il existe une certaine différence entre un programme exécuté séparément systemdet un programme qui s'exécute lorsqu'il est démarré via /etc/rc.localou l'interface CLI.
Pourquoi cela arrive-t-il? Est-ce à cause de différents niveaux d'exécution? De la magie noire?
Le script exécuté lorsqu'un périphérique se connecte à shairport-syncest le suivant: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
Voici le script de fondu: 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
Le script exécuté lorsqu'un périphérique se déconnecte de shairport-syncest le suivant: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
J'ai trouvé l'erreur suivante dans le /var/log/syslogseul lorsque shairport-sync a été initialement exécuté en tant que séparé systemd. Quand a shairport-syncété exécuté à partir de la CLI ou /etc/rc.localil n'y avait aucune erreur présente.
Jan 24 00:38:45 raspberrypi shairport-sync[617]: sudo: no tty present and no askpass program specified
Veuillez noter que la seule différence réside shairport-syncdans le démarrage initial, lorsque les appareils se connectent ou se déconnectent shairport-synccontinuent de fonctionner.
/home/pi/shScripts/shairportfade.sh?
rc.local
ps ... awk ... grep ...truc pourrait être remplacé par un plus simplepkill