while (1) em /etc/rc.local

0

Eu escrevi while true; do ping 10.9.0.1; sleep 1; done on /etc/rc.local em uma placa incorporada. Eu tenho esperado mais de 20 minutos que ele não recebe o prompt de login. Ou ficou preso na inicialização ou a inicialização funciona extremamente lenta (normalmente demora menos de 2 minutos para obter o prompt de login no meu dispositivo).

Posso corrigir isso inserindo o cartão SD no meu laptop e removendo o while(1) . Mas gostaria de saber se fiz isso em um PC / laptop, seria possível consertá-lo sem precisar reinstalar a distro?

    
por Angs 07.11.2014 / 20:25

1 resposta

2

Primeiramente, conforme escrito, seu ping será executado para sempre, a menos que seja incapaz de encontrar o host, porque ele é executado até que ele capture um sinal (ou seja, SIGINT ) dizendo para parar.

Os scripts em /etc/rc.local não são, pelo que me lembro, executados em segundo plano. Como tal, o seu script nunca termina, pois é um loop infinito. Dependendo exatamente do motivo pelo qual você está fazendo isso, você pode contextualizá-lo ou alterá-lo para sair quando uma condição for atendida.

Se você está fazendo isso para atrasar até que uma rede apareça, você pode:

while ! ping -c1 10.9.0.1; do
   sleep 1
done

Ou, se você realmente quiser que um ping de uma vez por segundo seja executado em segundo plano, você pode usar screen ou nohup ou disown para separar o processo do shell e permitir que a inicialização prossiga.

De qualquer maneira, isso é uma coisa potencialmente perigosa para fazer, já que você não tem nenhum meio de parar o script na inicialização se as coisas derem errado.

Você pode ser mais bem servido com um script em /etc/init.d/ , que está vinculado ao seu nível de execução escolhido que tem lógica suficiente para abortar se as coisas demorarem demais.

    
por 07.11.2014 / 20:41

Tags