Recebi a tarefa de garantir que, se um determinado servidor no trabalho morre, sabemos imediatamente. Porque eu não estou lá (ninguém é realmente), eu escrevi um script para executar na minha linux caixa roteador doméstico (que executa o Alpine Linux) para se conectar ao nosso trabalho roteador Cisco e ping o servidor (desde que o servidor não é diretamente acessível a partir da Internet).
Eu configurei rsa sem senha no roteador Cisco, e esta é a parte principal do meu script:
ssh user@work_router 'ping Server_IP' 2>/dev/null | grep -q ' 0 percent'
if [[ $? == 0 ]]
then
#It's not responding
else
#Everything is fine
fi
Os scripts funcionam muito bem quando são executados manualmente, mas quando digo ao cron para executá-lo, ele pára de funcionar. Redirecionando a saída ssh para um arquivo de log, vejo que este é o problema:
Ao executar manualmente, o comando fornece esta saída:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to SERVER_IP, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
Quando o cron o executa, esta é a saída:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to SERVER_IP, timeout is 2 seconds:
!
Existe alguma razão pela qual o ping ou o ssh está sendo interrompido antes de serem executados?
Editar:
Executando Script do terminal usando 'ssh -v -v':
Executando Script com o cron usando 'ssh -v -v':
Um vimdiff entre esses dois arquivos mostra algumas diferenças interessantes, mas está acima da minha cabeça. Alguém pode dizer o que está acontecendo?