Maneira fácil de esperar pela reinicialização de um host de um script?

2

Eu tenho um script em execução na máquina A que precisa acionar a reinicialização da máquina B e aguardar até que a máquina B seja totalmente copiada. Isso realmente precisa acontecer várias vezes em sucessão, então manter o tempo de espera no mínimo é algo importante. (É um teste automatizado de vários valores de parâmetros de inicialização.)

Estas máquinas estão rodando Linux, então acho que a abordagem básica deve ser instalar um script de inicialização tardio (por exemplo, prioridade 99) na máquina B que de alguma forma envie uma mensagem para a máquina A. Eu planejo instalar o script usando% código%. No entanto, onde estou preso é como enviar e aguardar a mensagem.

Eu acho que deve haver algum tipo de fila de mensagens ou serviço de coordenador que eu possa simplesmente criar scripts fora da caixa. Por exemplo, o Zookeeper deve ser capaz, embora a forma de criar scripts seja surpreendentemente não óbvia. Eu poderia escrever um pequeno programa cliente / servidor para fazer isso (presumivelmente usando um soquete TCP), mas eu estava esperando por uma solução mais simples. A configuração na máquina B precisa ser feita inteiramente pelo script na máquina A, para que etapas como compilar ou instalar módulos de linguagem de script sejam idealmente evitadas.

Obrigado por qualquer sugestão!

    
por Trevor Robinson 06.07.2011 / 18:14

3 respostas

2

Você também pode criar um ouvinte de rede simples usando o netcat ou o socat, que é iniciado tardiamente e o outro host verifica repetidamente. Outra maneira de resolver isso seria enviar uma mensagem "I'm Alive" automática por correio de rc.local para a outra máquina e pegá-la com um script de um arquivo .forward ou .qmail.

    
por 06.07.2011 / 20:12
2

Parece que você quer olhar para o daemon heartbeat . Isso é exatamente o que é feito: monitorar conjuntos de pares.

    
por 06.07.2011 / 18:32
0

Você não poderia simplesmente fazer ping periodicamente e verificar o código de saída do ping?

Se um ping for bem sucedido, o código de saída deve ser 0:

$ ping -c 1 -t 1 1.2.3.4
...
$ echo $?
0

Se não for bem sucedido, será 2:

$ ping -c 1 -t 1 5.6.7.8
...
$ echo $?
2
    
por 06.07.2011 / 18:20