Eu tenho um dispositivo IoT com uma distribuição Linux barebones nele. Não há crontab
, chkconfig
ou update-rc
.
Como devo proceder para a execução de um script quando o dispositivo é iniciado, depois que tudo no dispositivo tiver sido carregado? Eu pensei em adicionar o script em /etc/init.d
, mas nada parece acontecer. Este é o script que estou usando.
#! /bin/sh -e
# /etc/init.d/camstart
. /etc/init.d/functions.sh
start() {
/usr/local/packages/application/myapp
}
stop() {
kill 'pidof myapp'
kill 'pidof myappinternal'
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
pidof myapp
pidof myappinternal
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
Minha outra ideia foi usar /etc/rc.local
, mas o dispositivo não tem esse arquivo. Tem rc?.d
pastas variando de 1-6 e S. Colocar scripts em qualquer um deles não parece ter qualquer efeito.
Alguma sugestão?
EDIT: Não tenho certeza do que é a distro do Linux, mas verificar /etc/*release
me diz que é baseado no Poky do Yocto Project. De /proc/version
é a versão 4.9.62 do Linux.
Tanto quanto eu posso dizer, ele usa systemctl
para iniciar systemd
services.
EDIT2: Esqueceu de mencionar. Eu tentei escrever um systemd
service para meu script e iniciá-lo usando systemctl start app
, mas ele sai imediatamente com exit code 0
.
app.server:
[Unit]
Description=app
After=acap-pre.target
Requires=acap-pre.target
[Service]
Slice=extension-acap.slice
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/app start
ExecStop=/etc/init.d/app stop
EDIÇÃO FINAL: Funcionou depois de analisar Como escrever script de inicialização para systemd e viu que meu systemd service
estava ausente
[Install]
WantedBy=multi-user.target