Tengo curiosidad por saber cuál es esta diferencia entre los programas que existen; comenzó con systemd cuando se habilitó a través de systemctl, frente a los que se iniciaron a /etc/rc.local
través de la CLI.
Por ejemplo, recientemente estaba usando shairport-sync para la frambuesa pi. Inicialmente, configuré shairport-sync para que se inicie mediante sudo systemctl shairport-sync habilitado.
Más adelante, utilicé una funcionalidad shairport-sync
para ejecutar scripts antes y publicar en dispositivos que se conectan.
Para mi sorpresa, los scripts cuando fueron ejecutados por shairport-sync
no lo hicieron kill
arecord
oaplay
Sin embargo, cuando ejecutaba el script a través del terminal, el script se ejecutaba y mataba arecord
y aplay
.
Para confundirme aún más, lo maté shairport-sync
y lo inicié a través de la terminal para ver la salida de lo que estaba sucediendo. Cuando lo hice, los scripts funcionaron como esperaba cuando el dispositivo se conectó y se apagó arecord
y aplay
. Por lo tanto, como una solución He desactivado shairport-sync
en sysmtectl
y configurarlo para que se ejecute en /etc/rc.local
como una solución rápida. Después de un reboot
funcionó como esperaba.
Esto me lleva a creer que hay alguna diferencia entre un programa que se ejecuta por separado systemd
y un programa que se ejecuta cuando se inicia a través de /etc/rc.local
la CLI.
¿Por qué pasó esto? ¿Esto se debe a los diferentes niveles de ejecución? ¿Un poco de magia oscura?
El script que se ejecuta cuando un dispositivo se conecta shairport-sync
es el siguiente: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
Aquí está el script de desvanecimiento: 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
El script que se ejecuta cuando un dispositivo se desconecta shairport-sync
es el siguiente: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
Encontré el siguiente error en el /var/log/syslog
único cuando shairport-sync se ejecutó inicialmente como parte de systemd
. Cuando shairport-sync
se ejecutó desde la CLI o /etc/rc.local
no hubo errores presentes.
Jan 24 00:38:45 raspberrypi shairport-sync[617]: sudo: no tty present and no askpass program specified
Tenga en cuenta que la única diferencia es cómo shairport-sync
se inicia inicialmente, cuando los dispositivos conectados o desconectados shairport-sync
continúan ejecutándose.
/home/pi/shScripts/shairportfade.sh
?
rc.local
ps ... awk ... grep ...
material podría ser reemplazada por una simplepkill