Estou curioso para saber qual é essa diferença entre os programas que são; iniciado com systemd quando ativado por systemctl, vs iniciado por meio da /etc/rc.local
CLI ou por meio dela .
Por exemplo, recentemente usei o shairport-sync para o raspberry pi. Inicialmente, configurei o shairport-sync para iniciar por meio do sudo systemctl ativado pelo shairport-sync.
Posteriormente, usei uma funcionalidade shairport-sync
para executar scripts antes e publicar nos dispositivos conectados.
Para minha surpresa, os scripts quando executado por shairport-sync
não kill
arecord
ouaplay
No entanto, quando eu rodava o script via terminal, o script era executado e morto arecord
e aplay
.
Para me confundir ainda mais, matei shairport-sync
e o iniciei via terminal para ver a saída do que estava acontecendo. Quando eu fiz isso, os scripts funcionaram como eu esperava quando o dispositivo se conectou e matou arecord
e aplay
. Assim, como uma correção I desativada shairport-sync
em sysmtectl
e configurá-lo para ser executado no /etc/rc.local
como uma solução rápida. Depois de um reboot
funcionou como eu esperava.
Isso me leva a acreditar que há alguma diferença entre um programa executado separadamente systemd
e um programa que é executado quando iniciado via /etc/rc.local
ou pela CLI.
Por que isso acontece? Isso é devido a diferentes níveis de execução? Alguma magia negra?
O script que é executado quando um dispositivo se conecta shairport-sync
é o seguinte: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
Aqui está o script fade: 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
O script que é executado quando um dispositivo é desconectado shairport-sync
é o seguinte: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
Eu encontrei o seguinte erro no /var/log/syslog
somente quando o shairport-sync foi executado inicialmente como separado de systemd
. Quando shairport-sync
foi executado a partir da CLI ou /etc/rc.local
não houve erros presentes.
Jan 24 00:38:45 raspberrypi shairport-sync[617]: sudo: no tty present and no askpass program specified
Observe que a única diferença é como shairport-sync
é iniciado inicialmente, quando os dispositivos se conectam ou desconectam shairport-sync
.
/home/pi/shScripts/shairportfade.sh
?
rc.local
ps ... awk ... grep ...
material pode ser substituído por um mais simplespkill