shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] bash e reboot...


From: Eliphas Levy Theodoro
Subject: Re: [shell-script] bash e reboot...
Date: Fri, 03 Feb 2006 18:05:17 -0200
User-agent: Thunderbird 1.5 (Windows/20051201)

Mauricio escreveu:
Ontem aconteceu uma situaćão aqui na empresa curiosa. Uma das máquinas do nosso datacenter perdeu o filesystem e não rodava nenhum executável. A questão era como dar o reboot na máquina estando como root e usando somente o bash (e seus comandos internos) e a conexão ssh... alguém teria uma sugestão? Bom, ligamos para o condomínio e eles rebotaram a máquina para nós. Mas ficou o desafio... alguém teria uma idéia? Pensei em colocar o código de um executável tipo o halt numa variável e depois executá-lo. Isso funcionaria???

Bom, se não me engano o bash tem um kill "builtin"; como o init tem sempre o PID 1, então acho que rolaria algo como:

kill -SIGINT 1

De acordo com a manpage do init, o SIGINT executa como o "ctrlaltdel" do inittab.

*PORÉM*... o ctrlaltdel executa o /sbin/shutdown, e se ele não está mais acessível... Bem, se ele deixar de executar o shutdown e ir adiante, matando os processos e avisando o kernel que ele pode reiniciar, beleza.
Se não...De volta à prancheta. Alguém quer tentar esse?

Bom, acho que um:
cd /proc; for i in [0-9]*; do [ "$i" == "$$" -o ] || kill -SIGINT $i; done

Ou seja, vai no /proc (já que não temos /bin/ps), e pra cada processo rodando, tenta dar um SIGINT nele. Nesse caso, pelo menos os aplicativos que já estão rodando vão morrer. Hmm mas se o init não reiniciar como no caso anterior, isso também não vai reiniciar a máquina, e você vai acabar com um sistema totalmente sem processos rodando... De volta à prancheta de novo.

... Hmm, não sei. Definitivamente, o init não vai me ajudar.

Acho que o esquema é mandar pro kernel um "magic sysrequest", aquela combinação de teclas emergencial que o kernel recebe pra desmontar os sistemas de arquivos, reiniciar, desligar... Você poderia alterar o INIT pra mandar uma mensagem dessas pro kernel...

(/me procura por kernel sysrq)

IP Tables network magic SysRq function - http://marek.terminus.sk/prog/ipt_sysrq.shtml

Esse cara pensou nisso antes, e a solução é melhor ';) Não precisa nem do SSH estar rodando. Hmm acho que vou botar nuns servidores que ficam nos morros por aqui.

Quem quer experimentar? ':D

HTH,
--
Eliphas


reply via email to

[Prev in Thread] Current Thread [Next in Thread]