Estou executando o Raspbian Jessie Lite no RPi3. Criei um arquivo em /etc/systemd/system/autostart.service
:
[Unit]
Description=Application
[Service]
User=root
ExecStart=/home/pi/autostart.sh
[Install]
WantedBy=multi-user.target
O serviço está habilitado corretamente e realmente executado. Aqui está a fonte do meu script de inicialização:
#!/bin/sh
aplay -c2 -r48000 -fS16_LE < /dev/zero &
chmod 1777 /tmp
hciconfig hci0 up
/home/pi/bin/./app
Meu aplicativo é executado, mas tem comportamentos estranhos, enquanto executá-lo a partir de um console raiz /home/pi/bin/./app
não causa problemas. Além disso, é claro, o autostart.sh
script permanece em execução até o término da minha aplicação.
Para corrigir os dois problemas tentei executá-lo em segundo plano, adicionando &
no final. Ou apenas tentei redirecionar a saída para um arquivo adicionando &> /home/pi/log.txt
. Em ambos os casos, meu aplicativo não é mais executado!
o que estou perdendo?
Responder1
Você pode estar sentindo falta destas coisas:
Adicione
Type=oneshot
à seção [Serviço]. Não há necessidade de colocá-lo em segundo plano, e redirecionar a saída para um arquivo não funcionará no arquivo de configuração. A saída já foi capturada e redirecionada usando aStandardOutput
chave, cujo padrão é enviá-la para o diário do systemd.Além disso, simplesmente criar o arquivo não o executa, você também deve habilitá-lo. Correr
systemctl enable autostart
Também observarei que você acaba executando /home/pi/bin/app
como root, o que pode não ser o que você deseja por segurança. A menos que seja necessário executá-lo como root, considere executar seu aplicativo como outro usuário.