Saindo de um loop de reinicialização infinito na inicialização (rc.local)

5

Estou criando um script de inicialização (chamado de rc.local) no Debian Squeeze. O script de inicialização verifica um valor de variável de um arquivo, decrementa a variável e a grava de volta no arquivo. Em seguida, se a variável for maior que 0, ela executa um teste e reinicializa o sistema. Se a variável for 0 ou menor que 0, então não reinicializa o sistema. Minha pergunta é a seguinte: Suponha que eu percebo, depois de alguns testes, que há um erro no teste. Existe alguma maneira de quebrar o loop execute_test- > reboot- > repeat que eu configurei? Colocar um "sleep 1000" no teste ou fazer um ps aux | grep pode funcionar, mas não tenho certeza se eu terei acesso a eles antes do rc.local scripts foram executados. E se eu executar o script em segundo plano em vez do primeiro plano? Eu teria acesso ao bash login shell etc. enquanto o teste está sendo executado em segundo plano nesse caso?

 COUNT='cat $testFile|wc -l'
 if [ $COUNT -gt 0 ];then
                ARGS='head -1 $testFile'
                cd /testCode
                /testCode/startTest.sh $ARGS
                sed -i '1d' $testFile
                echo "rebooting"
                /sbin/reboot &
                exit 0
            fi

Eu sei que dei poucos detalhes, já que não tenho certeza de qual informação seria necessária. Eu atualizarei a pergunta conforme necessário.

UPDATE: eu corri o teste. Eu recebo o aviso de login antes de o teste terminar. Eu tinha que obter o prompt de login somente depois que rc.local fosse executado. Alguém poderia lançar luz sobre isso?

    
por Alastor Moody 23.08.2013 / 22:49

2 respostas

2

apenas substitua / sbin / reboot por uma reinicialização condicional

[ -r /noreboot ] || /sbin/reboot 

então, se você não quiser reinicializar, simplesmente toque em / noreboot e será bom, não importa o que o script esteja fazendo no momento, desde que ele ainda não tenha sido reinicializado.

você também pode apenas inicializar o sistema com um livecd e comentar a linha de reinicialização em rc.local quando encontrar um bug.

    
por 23.08.2013 / 22:56
2

Você não recebe um prompt de login até que /etc/rc.local termine de executar.

Se você quiser permitir logins durante a execução do teste, coloque o texto em um crontab com @reboot para os campos de data ou execute os testes em segundo plano em /etc/rc.local . Tenha em atenção que é provável que seja surpreendente se a máquina reiniciar repentinamente alguns minutos depois de alguém ter iniciado sessão. É melhor ter um /etc/motd que notifique os utilizadores de que isto está a acontecer.

    
por 26.08.2013 / 02:19