Um teste de ping de host que sempre funciona corretamente a partir da linha de comando interativa bash
no Cygwin , está se comportando incorretamente em seu próprio crontab - sempre selecionando o segundo host - e eu posso ' t descobrir porquê:
SHELL=/bin/bash
*/29 7-23 * * * [ -n "$(pidof unison)" ] || (partner=5.174.63.120; ping -A -c5 $partner 6 7 |grep -w "ttl" || partner=5.3.172.247; time nice unison-sync $partner &> /tmp/sync.master.dev.log )
which ping
/usr/bin/ping
Isso basicamente quer que 5.174.63.120 seja a preferência de host de sincronização de 1ª escolha, no entanto, se ele não voltar no momento, use 5.3.172.247 para esta rodada. Se unison
ainda não estiver em execução, isto é.
No entanto, a execução a partir da linha de comando sempre funciona como esperado, ecoando o primeiro endereço IP, se disponível, ou o segundo:
partner=5.174.63.120; ping -A -c5 $partner 6 7 |grep -w "ttl" || partner=5.3.172.247; echo $partner
No Ubuntu isso funciona tanto em crontab
como em cli.
Existe uma maneira melhor de eu conseguir isso, que é ao mesmo tempo compacto e portátil nos dois sistemas operacionais (Linux Ubuntu 11.10 e Cygwin no Windows7,32bit)?
Melhor ainda, gostaria de generalizar minha verificação de host para mais de dois, mas ainda codificá-la em uma linha crontab concisa:
Use A se alcançável, mais use B se acessível, mais use C se acessível, ... senão use Z.