fdell Das Problem liegt leider am DNS Server. Ich habe in meiner Fritzbox den DNS-Server von "Cloudflare" und "DNS over TLS (DoT)" eingerichtet. Dies führt dazu, dass die Namensauflösung temporär nicht funktioniert.
Wenn ich das Skript oder den *.service manuell starte, funktioniert es komischerweise fehlerfrei bei der Namensauflösung. Wenn ich in der Fritzbox-config den DNS-Server auf "Vom Internetanbieter zugewiesene DNSv4-Server verwenden (empfohlen)" ändere, funktioniert das ganze per *.timer oder *.service ebenfalls problemlos.
Es könnte einfach sein, daß die TLS-Session zu deinem Nameserver abgelaufen wäre zu diesem Zeitpunkt. Und wget/curl versuchen dann nur einmal, eine IP-Adresse für den Download zu erhalten.
Möglichkeiten:
a) Den wget-Aufruf mehrmals zu starten, z.B. in einer for-Schleife dreimal mit 1 Sekunde Pause. Die Schleife kann abgebrochen werden wenn der Return-Wert von wget 0/erfolgreich ist.
b) Evtl. reicht schon ein vorheriger DNS-Request um die Session zum DNS-Server zu initiieren. Z.B. durch ein vorangehendes:
ping -c 3 hosts.ubuntu101.co.za
sleep 1
(Die ping-Ausgabe kann - wenn es so klappt - komplett nach /dev/null umgeleitet werden.)
Fakt ist auf jedenfall: Da das Downloaden der Liste ja der zentrale Vorgang des Skripts ist, bedarf dieser eine eigene "Fehler"-Behandlung und sollte nur dann abbrechen(nichts tun), wenn der User bestimmte Kriterien als nicht möglich ersieht.
Leider (aber in punkto Sicherheit zum Glück) erlauben weder wget noch curl andere DNS-Server für die Aktion zu verwenden, beide Tools sind ohne die entsprechende Option kompiliert. Dann könnte z.B. für diesen Aufruf dein Provider DNS verwendet werden anstatt des System-DNS. Es wäre allerdings möglich sich bei Bedarf ein eigenes (ggf. statisch gelinktes) wget/curl zu bauen und z.B. nach /usr/local abzulegen. Das wäre aber IMHO mit "Kanonen auf Spatzen" gefeuert und bedarf auch einiger Sicherheitsvor-/nachkehrungen.
Martin-MS Außerdem dürfte ein solcher Eintrag dann auch nicht auf 0.0.0.0umgeleitet werden, was dann den eigentlichen Nutzen der Liste zweifelhaft erscheinen lässt, denn für diese Einträge wird der Hostname dann doch in seine eigentlich Adresse aufgelöst und die Verbindung hergestellt.
Das stimmt nicht. Solange die hosts-Datei primär für DNS-Resolv genutzt wird werden diese Adressen zu 127.0.0.1/localhost umgesetzt.
Kannst du testen mit z.B.
[root@ws01 ~]# dig zzzzzz.petrodollar.org && ping -c 2 zzzzzz.petrodollar.org
...
;; ANSWER SECTION:
zzzzzz.petrodollar.org. 3213 IN A 103.224.182.253
...
PING zzzzzz.petrodollar.org (103.224.182.253) 56(84) Bytes an Daten.
64 Bytes von lb-182-253.above.com (103.224.182.253): icmp_seq=1 ttl=55 Zeit=165 ms
64 Bytes von lb-182-253.above.com (103.224.182.253): icmp_seq=2 ttl=55 Zeit=165 ms
[root@ws01 ~]# echo "0.0.0.0 zzzzzz.petrodollar.org" >> /etc/hosts
[root@ws01 ~]# dig zzzzzz.petrodollar.org && ping -c 2 zzzzzz.petrodollar.org
...
;; ANSWER SECTION:
zzzzzz.petrodollar.org. 3111 IN A 103.224.182.253
...
PING zzzzzz.petrodollar.org (127.0.0.1) 56(84) Bytes an Daten.
64 Bytes von localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 Zeit=0.012 ms
64 Bytes von localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 Zeit=0.023 ms
[ich@ws01 ~]$ wget zzzzzz.petrodollar.org
--2024-01-07 09:38:39-- http://zzzzzz.petrodollar.org/
Auflösen des Hostnamens zzzzzz.petrodollar.org (zzzzzz.petrodollar.org)… 0.0.0.0
Verbindungsaufbau zu zzzzzz.petrodollar.org (zzzzzz.petrodollar.org)|0.0.0.0|:80 … fehlgeschlagen: Verbindungsaufbau abgelehnt.
Besser wäre so eine hosts-(Block)-Liste natürlich auf dem lokalen Router/DNS-Server aufgehoben.