Ich führe den folgenden Befehl alle 5 Minuten in meiner Crontab aus, um Phusion Passenger am Leben zu halten.
*/5 * * * * wget mysite.com > /dev/null 2>&1
Wenn ich dies ausführe, führt es auf der Site eine Wget-URL aus, die STDOUT / STDERR nach / dev / null weiterleitet. Wenn ich dies über eine Befehlszeile ausführe, funktioniert es einwandfrei und es wird keine index.html-Datei in meinem Ausgangsverzeichnis erstellt.
Wenn es von cron aus ausgeführt wird, erstellt es alle fünf Minuten eine neue index.html-Datei, so dass ich eine Menge Indexdateien habe, die ich nicht möchte.
Ist meine Syntax für die Ausführung des Cron-Jobs falsch? Von einer Kommandozeile aus funktioniert es problemlos, aber von cron aus wird eine index.html-Datei in meinem Home-Verzeichnis erzeugt.
Ich bin sicher, ich mache einen einfachen Fehler. Würde mich freuen, wenn jemand helfen könnte.
wget
von einem Terminal aus und der Anzeige eines Fortschrittsbalkens.Antworten:
Du könntest es so machen:
Hier wird
-O
die heruntergeladene Datei an/dev/null
und die-o
Protokolle an/dev/null
statt an stderr gesendet. Auf diese Weise ist eine Umleitung überhaupt nicht erforderlich.quelle
Müssen Sie den Inhalt tatsächlich herunterladen oder nur die 200 OK erhalten? Wenn Sie nur den Server die Anfrage verarbeiten lassen müssen, warum nicht einfach das
--spider
Argument verwenden?quelle
Ich würde folgendes verwenden:
Die
-O -
Option stellt sicher, dass der abgerufene Inhalt an stdout gesendet wird.quelle
foo > /dev/null 2>&1
prägnanter geschrieben alsfoo &> /dev/null
.bash
. Insh
, was normalerweise von cron verwendet wird, funktioniert die Umleitung von kaufmännischem Und nicht.Sie sagen, Sie brauchen nur die Antwort "200 OK" in einem Kommentar.
Dies ermöglicht eine Lösung mit einigen zusätzlichen Vorteilen gegenüber denen von
wget -O /dev/null -o /dev/null example.com
. Die Idee ist, die Ausgabe nicht in irgendeiner Weise zu verwerfen, sondern überhaupt keine Ausgabe zu erstellen.Da Sie nur die Antwort benötigen, müssen die Daten, die in die lokale Datei index.html heruntergeladen werden, nicht an erster Stelle heruntergeladen werden.
Im HTTP-Protokoll wird der Befehl 'GET' zum Herunterladen eines Dokuments verwendet . Um auf ein Dokument so zuzugreifen, dass alles außer dem eigentlichen Herunterladen des Dokuments möglich ist, gibt es einen speziellen Befehl 'HEAD'.
Wenn Sie für diese Aufgabe 'GET' verwenden, wird das Dokument heruntergeladen und lokal verworfen. Mit 'HEAD' können Sie genau das tun, was Sie brauchen. Das Dokument wird nicht an erster Stelle übertragen. Es wird immer derselbe Ergebniscode zurückgegeben wie per Definition 'GET'.
Die Syntax der Methode zu verwenden ,
HEAD
mitwget
ein wenig seltsam: Wir brauchen die Möglichkeit , zu verwenden--spider
. In diesem Zusammenhang macht es einfach, was wir wollen - greifen Sie auf die URL mit 'HEAD' anstelle von 'GET' zu.Wir können die Option
-q
(leise) verwenden, umwget
keine Details darüber auszugeben, was es tut.Wenn Sie dies kombinieren,
wget
wird weder etwas an stderr ausgegeben noch ein Dokument gespeichert.wget -q --spider 'http://example.com/'
Der Exit-Code gibt an, ob die Anfrage erfolgreich war oder nicht:
Für einen Befehl in bedeutet
crontab
die Tatsache, dass in beiden Fällen keine Ausgabe erfolgt, dass Sie das Abrufen einer Ausgabe erneut als Hinweis auf Fehler verwenden können.Ihr Beispielbefehl würde folgendermaßen geändert:
Dies hat die gleichen Vorteile wie
wget -O /dev/null -o /dev/null example.com
. Der zusätzliche Vorteil ist, dass die Protokollausgabe und die Dokumentausgabe nicht generiert werden, sondern lokal generiert und verworfen werden. Oder natürlich besteht der große Unterschied darin, das Dokument nicht herunterzuladen und dann zu verwerfenindex.html
.quelle
Möge Ihre Frage diesbezüglich lauten:
Dies sollte keine Keepalive-Skripte erfordern.
Ansonsten ist die Lösung von Kasperd perfekt.
quelle
wget
Befehlen am Leben erhalten wird . In vielen Situationen ist die Notwendigkeit, Nachrichten am Leben zu erhalten, ein Symptom für einen zugrunde liegenden Konstruktionsfehler, der behoben werden sollte. Aber selbst wenn all diese Probleme behoben sind, bleiben noch einige Fälle übrig, in denen eine Keep-Alive-Nachricht die richtige Lösung ist. Auch wenn keine Keep-Alive-Nachrichten benötigt werden, kann der Cron-Job dennoch ein nützlicher Bestandteil einer Überwachungskonfiguration sein.