Você tem três servidores configurados de forma quase idêntica, mas deseja executar os trabalhos cron
em apenas um deles?
Vamos seguir seu esquema de nomenclatura para os servidores: web01
, web02
e web03
. Estou usando o shell script, mas o princípio é exatamente o mesmo para o PHP. (Eu posso jogar PHP por aí, mas não me considero bem versado para codificá-lo em público.)
Perto da parte superior de cada script cron
, você pode fazer algo assim, o que fará com que o script seja encerrado, a menos que o nome do servidor seja web01
.
[ web01 != "$(hostname)" ] && exit
Isso não é muito resiliente em face de uma indisponibilidade do servidor. Se web01
morrer, presumivelmente você deseja pegar os cron
jobs em outro servidor. Supondo que você tenha acesso ao DNS, você pode criar um CNAME no servidor responsável por executar cron
. Aqui está uma entrada de amostra para bind
; será semelhante para outros sistemas:
cron.contoso.com 300 IN CNAME web01.contoso.com
Você pode usar dig
ou nslookup
para comparar o nome do servidor com o alias e, em cinco minutos (300 segundos), você pode ter trocado as responsabilidades de cron
por outro servidor:
myaddr="$(nslookup "$(hostname)" | awk '$1=="Address:"{a=$2} END{print a}')"
cronaddr="$(nslookup "$(hostname)" | awk '$1=="Address:"{a=$2} END{print a}')"
[ "$myaddr" != "$cronaddr" ] && exit
Ou:
myaddr="$(dig +short "$(hostname).contoso.com")"
cronaddr="$(dig +short cron.contoso.com)"
[ "$myaddr" != "$cronaddr" ] && exit