
Temos duas máquinas que consultam periodicamente vários recursos externos usando cURL. Há alguns dias, essas solicitações começaram a falhar intermitentemente com o Could not resolve host: www.example.com
.
Ou na linha de comando:
curl: (6) Could not resolve host: www.example.com
Isso está acontecendo em vários domínios diferentes, mas aparentemente não em TODOS os domínios. Escrevi um script para tentar me conectar a um desses domínios a cada 5 segundos, além de pesquisar usando dig e getent. A chamada curl geralmente falhará por cerca de um minuto a cada poucos minutos, enquanto dig e getent consistente são resolvidos com êxito. Aqui está o roteiro:
#!/bin/bash
for i in {1..500}
do
printf "\ndig short:\n"
dig +short www.example.com
printf "\ngetent:\n"
getent ahosts www.example.com
printf "\ncURL v4:\n"
curl -sSI -4 https://www.example.com
sleep 5
done
E a saída bruta quando o curl falha:
dig short:
r9fe7.x.incapdns.net.
107.154.108.172
getent:
107.154.108.172 STREAM r9fe7.x.incapdns.net
107.154.108.172 DGRAM
107.154.108.172 RAW
cURL v4:
curl: (6) Could not resolve host: www.example.com
Tentei especificar vários servidores de nomes públicos em /etc/resolv.conf, incluindo 1.1.1.1 e 8.8.8.8, sem efeito. Também tentei definir explicitamente o servidor de nomes para dig e curl, mas ainda assim dig sempre é bem-sucedido, enquanto curl falha intermitentemente na resolução.
Em /etc/nsswitch.conf eu tenho
hosts: files dns myhostname
Não tenho certeza do que mais poderia fazer com que o curl falhasse periodicamente na resolução dos hosts, enquanto dig
and getent ahosts www.example.com
funcionava de forma consistente.