O script chamado em rc.local só executa o segundo comando, não o primeiro

3

Estou executando um Raspberry Pi com Fadecandy para controlar os LEDs. Eu tenho tudo configurado, eu só quero ter o servidor Fadecandy e meu esboço de processamento exportado executado no arranque.

No rc.local, estou chamando um script chamado startup.sh, que contém o seguinte:

#! /bin/sh

/home/pi/sketchbook/leds/loading/application.linux64/loading &
/usr/local/bin/fcserver &

A segunda linha (o fcserver) está em execução, o servidor é iniciado corretamente. A primeira linha (o aplicativo) parece não estar rodando.

No entanto, se eu chamar esse script (ou rc.local) do terminal, as duas linhas serão executadas e o aplicativo será iniciado.

Eu sei que se houver um erro, o rc.local irá sair, mas esse não parece ser o problema quando a linha second está em execução depois da primeira linha não.

O que estou fazendo de errado? Qualquer ajuda seria muito apreciada

    
por Amy 12.05.2017 / 11:05

1 resposta

2

Meu palpite seria que o fcserver fosse executado daemonized - isto é, forks e disassociates do shell em execução, enquanto o seu programa de carregamento não.

O que acontece quando seu script é executado pelo init, é que ele gera um novo shell (/ bin / sh no seu caso), executa o carregamento e o fcserver em segundo plano nesse shell, ... e então destrói esse shell , que implicitamente envia um HUP para todos os processos filhos. O Fcserver sobrevive porque ele é daemonizado, enquanto o carregamento não.

Você pode tentar prefixar sua invocação de carregamento com nohup :

#! /bin/sh

nohup /home/pi/sketchbook/leds/loading/application.linux64/loading &
/usr/local/bin/fcserver &

Não tenho certeza se o nohup está disponível no seu Raspberry Pi - não tenho nenhum para verificar.

    
por 12.05.2017 / 11:26