Wie verwende ich Curl in einem Cron-Job?

12

Ich muss einen Cron-Job in cpanel einrichten, der einmal pro Woche eine URL (auf demselben Server) aufruft. Ich wollte wget verwenden, aber es stellte sich heraus, dass dies auf dem gemeinsam genutzten Server deaktiviert ist.

Gibt es eine Alternative zu wget ? Ich habe gehört, dass Curl verwendet werden kann, aber ich weiß nicht, wie ich das in einem Cron-Befehl einrichten soll.

Und wie lautet der Befehl, damit der Cronjob nach Abschluss keine Aktion ausführt?

Irgendwelche Ideen sehr geschätzt!

Davidhyland
quelle
1
Was würde der Wget tun, wenn Sie es benutzen könnten?
User9517
Warum sollten sie Curl zulassen, falls sie wget deaktiviert haben?
Andol
@Iain - es ist erforderlich, um ein PHP-Skript zu verarbeiten
Davidhyland
@Andol - sehr gute Frage. so ist das eben
davidhyland

Antworten:

19

Anstatt Wget zu verwenden, funktioniert Curl folgendermaßen:

curl --silent http://domain.com/cron.php

was genauso funktioniert wie wget. Wenn es sich um eine PHP-Datei handelt, die Sie starten, kann sie aus irgendeinem Grund nicht über den Befehlszeilen-PHP-Interpreter wie folgt ausgeführt werden:

php -q /path/to/cron.php

dasselbe gilt für eine Webserver-Anfrage und funktioniert häufig viel schneller und ohne bestimmte Timeout-Einschränkungen, wenn sie über den Webserver / curl aufgerufen werden

Anthonysomerset
quelle
Wenn Sie auf diese Weise curl aufrufen, wird das Ergebnis auf stdout gedruckt. Wenn Sie sich wie wget verhalten und die Ausgabe unter einem auf der URL basierenden Dateinamen speichern möchten, möchten Sie auch das Flag --remote-name hinzufügen.
Andol
Bedeutet das --silent, dass keine Antwort oder Ausgabe erfolgt?
Davidhyland
1
Das Aufrufen des PHP-Skripts über die Befehlszeile führt möglicherweise nicht zum gleichen Ergebnis. Neben der Möglichkeit einer anderen Konfiguration gibt es auch das nicht seltene Szenario, dass das Skript auf diese Weise als ein anderer Benutzer ausgeführt wird. Es hängt alles vom Setup ab.
Andol
Nun, ich habe es mit "curl --silent domain.com/script.php > / dev / null 2> & 1" zum Laufen gebracht, aber es funktioniert auch mit "curl -o --url domain.com/script.php >" / dev / null 2> & 1 "Was ist der Unterschied?
Davidhyland
1
Der erste Befehl sendet alle Ausgaben an / dev / null, der zweite Befehl erstellt eine Datei, die -urlim Home-Verzeichnis des Benutzers, der das Skript ausführt, aufgerufen wird und die Ausgabe Ihrer PHP-Datei enthält. Alle anderen Ausgaben gehen an / dev / null.
User9517
6

Wenn Locken verfügbar ist, können Sie etwas ausprobieren

1 1 * * 0  /usr/bin/curl --silent http://example.come/some.php &>/dev/null

Das sollte dazu führen, dass die Locke völlig still ist, sodass Sie nach Abschluss keine E-Mails mehr erhalten.

user9517
quelle
4
Ich würde auch empfehlen, die Option --show-error zu verwenden, damit sie für den normalen Betrieb nicht verwendet wird. In diesem Fall wird jedoch ein Fehler ausgegeben.
Emerino
5

Ich würde vorschlagen, zusätzlich zu --silent den Parameter "-m" hinzuzufügen, da dieser Parameter die maximal zulässige Zeit für die Übertragung festlegt. Stellen Sie sich vor, Sie rufen den Cron jede Minute an und das Skript benötigt 2 Minuten - dies kann sich negativ auf die Serverauslastung oder andere Dinge auswirken.

1 1 * * 0  /usr/bin/curl -m 120 -s http://example.come/some.php &>/dev/null
Johnny Vietnam
quelle