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.localtravé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-syncpara ejecutar scripts antes y publicar en dispositivos que se conectan.
Para mi sorpresa, los scripts cuando fueron ejecutados por shairport-syncno lo hicieron kill arecordoaplay
Sin embargo, cuando ejecutaba el script a través del terminal, el script se ejecutaba y mataba arecordy aplay.
Para confundirme aún más, lo maté shairport-syncy 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ó arecordy aplay. Por lo tanto, como una solución He desactivado shairport-syncen sysmtectly configurarlo para que se ejecute en /etc/rc.localcomo una solución rápida. Después de un rebootfuncionó como esperaba.
Esto me lleva a creer que hay alguna diferencia entre un programa que se ejecuta por separado systemdy un programa que se ejecuta cuando se inicia a través de /etc/rc.localla 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-synces 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-synces 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-syncse ejecutó desde la CLI o /etc/rc.localno 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-syncse inicia inicialmente, cuando los dispositivos conectados o desconectados shairport-synccontinúan ejecutándose.
/home/pi/shScripts/shairportfade.sh?
rc.local
ps ... awk ... grep ...material podría ser reemplazada por una simplepkill