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.localCLI 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-syncpara executar scripts antes e publicar nos dispositivos conectados.
Para minha surpresa, os scripts quando executado por shairport-syncnão kill arecordouaplay
No entanto, quando eu rodava o script via terminal, o script era executado e morto arecorde aplay.
Para me confundir ainda mais, matei shairport-synce 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 arecorde aplay. Assim, como uma correção I desativada shairport-syncem sysmtectle configurá-lo para ser executado no /etc/rc.localcomo uma solução rápida. Depois de um rebootfuncionou como eu esperava.
Isso me leva a acreditar que há alguma diferença entre um programa executado separadamente systemde um programa que é executado quando iniciado via /etc/rc.localou 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/syslogsomente quando o shairport-sync foi executado inicialmente como separado de systemd. Quando shairport-syncfoi executado a partir da CLI ou /etc/rc.localnã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