Como executar um programa de loop infinito na inicialização de um pi de framboesa sem parar a inicialização

0

Eu tenho um script de shell:

#!/bin/bash
while sudo /home/pi/MyCode; do :; done
echo Error with MyCode

que executa um programa em um loop infinito. Eu quero configurar o script de shell para executar na inicialização (que eu fiz com outros scripts bash). No entanto, não quero que o script interrompa a inicialização ou me impeça de entrar no ssh.

Eu vi muitas pessoas que tiveram que limpar e remontar seus cartões SD devido a loops infinitos serem criados na inicialização. Como evito isso?

Eu tentei aumentar o código:

#!/bin/bash
while sudo /home/pi/MyCode &; do :; done
echo Error with MyCode

para executar o MyCode em segundo plano, mas continuo recebendo um erro ao longo das linhas

unexpected character before ;

Existe uma maneira de executar este script na inicialização sem parar minha inicialização? Se assim for, isso pode ser feito de uma forma que eu ainda tenho a opção de SSH e parar o script a qualquer momento?

    
por JRogerC 18.09.2014 / 22:16

2 respostas

0

Remova o: Ele gera o erro de sintaxe. Alternativamente, insira um sono 1 ou algo semelhante em vez disso, bash pode pirar em vazio enquanto ... fazer loops. Se você seguir essa abordagem, você também perderá o & Se você deixá-lo em você irá criar um novo processo para cada iteração do loop, triturando o seu pi para uma parada, uma vez que todo o seu ram é tomado.

Use também ./myCode.sh ou exec myCode.sh para garantir que ele realmente execute o script.

Se você estiver executando o raspbian, também sugiro usar o upstart. Isso permite uma maneira mais controlada de acionar o material durante a inicialização, como executar apenas quando o sistema de arquivos estiver disponível.

Talvez postar o código que você deseja executar também, posso verificar se não há outros erros. Bom para o meu treinamento bash-fu: -)

    
por 18.09.2014 / 23:03
0

Coloque o loop em seu próprio script, executando em segundo plano:

script de inicialização:

#!/bin/bash
mainloop.sh &
echo Should get here

mainloop.sh:

#!/bin/bash
while sudo /home/pi/MyCode; do :; done

Provavelmente, existe uma maneira de fazer isso em um script, mas eu não estou familiarizado o suficiente com o Bash para fazê-lo.

    
por 27.10.2014 / 15:24