Einsatz von curl und wget für Cronjobs

Neulich hatte ich das Problem, dass durch falsch konfigurierte Cronjobs auf einem Linux-Server dessen Plattenkapazität zu Ende ging und nichts mehr lief.  Es wurde festgestellt, dass wirklich Millionen gleichartiger Dateien in einem Verzeichnis lagen, die wie die gerufenen PHP-Scripte mit einer laufenden Nummer angehängt hießen. Zunächst dachten wir an Logfiles mit einem Timestamp, aber wer hätte die erzeugen sollen? Cron macht das nicht, das gerufene Script ebenfalls nicht.

In /etc/crontab standen die Aufrufe (schematisch) wie folgt:

1 1 * * 0  /usr/bin/wget http://domain/script.php

Das bewirkt aber, dass das Script script.php tatsächlich runtergeladen wird und da es ja schon da ist, wird dabei eine fortlaufende Nummer angehängt! Genau das ist die eigentliche Aufgabe von wget… Ich will das Script aber nicht haben, sondern ausführen!

Es fehlten nur geeignete Parameter, um Ausgaben und den Download zu unterdrücken. Dafür bieten sich zwei Möglichkeiten an:

1 1 * * 0 /usr/bin/wget -q [http://...] >/dev/null 2>&1

oder in der Wirkung äquivalent

1 1 * * 0 /usr/bin/curl --silent [http://...] >/dev/null 2>&1

Die dritte Möglichḱeit wäre hier gewesen, das PHP-Script  direkt aufzurufen, also PHP als CLI zu betreiben. Das schied aber hier aus, da sich das Script auf einem anderen Server befindet.


Danke an Matt Gutts mit seinem Beitrag „How to fetch a url with curl or wget silently“. Beachte auch die vielen ergänzenden Kommentare dort!