Execute o script na inicialização como root depois que tudo tiver terminado

0

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
    
por Kagemand Andersen 20.06.2018 / 15:10

1 resposta

0

O procedimento para iniciar automaticamente um daemon no runlevel 3 é fácil:

  1. coloque seu script em /etc/init.d ,
  2. verifique as permissões e a propriedade do script,
  3. crie um link simbólico em /etc/rc3.d para o script com o seguinte nome S99scriptmame .

O S significa que iniciam o serviço . O número é usado para classificar a ordem de início do serviço de 01 (script de alta prioridade) para 99 (último script de prioridade).

Provavelmente, você precisa criar um link para o script em /etc/rc0.d (halt) e /etc/rc6.d (reboot) denominado K01scriptname . Normalmente, o último deamon iniciado é o primeiro a ser parado.

Veja man init.d ^ 1 para uma explicação completa.

    
por 20.06.2018 / 15:27