Ich versuche dieses Skript alle fünf Minuten auszuführen. Es scheint, dass die einzige Möglichkeit, CRON-Jobs auf OpenShift auszuführen, ihr CRON-Plugin ist. Und das CRON-Plugin erlaubt nur Minuten-, Stunden- und Tages-Skripte (indem man das Skript in den entsprechenden Ordner legt).
Ich versuche dieses Skript alle 5 Minuten auszuführen:
%Vor%Aber jetzt läuft es jede Minute (weil es in den winzigen Ordner gelegt wird).
Wie kann ich es neu schreiben, so dass es alle 5 Minuten läuft?
Ändern Sie das Skript so, dass es die aktuelle Zeit überprüft und ausgibt, wenn es kein Vielfaches von 5 Minuten ist.
In etwa so:
%Vor% Der rechte Operand des Operators =~
ist ein regulärer Ausdruck; Das obige trifft zu, wenn die aktuelle Minute in 0
oder 5
endet. Mehrere andere Ansätze sind möglich:
(Überprüfen Sie, ob ein Zeichen gefolgt von 0
oder 5
; $minute
immer genau 2 Zeichen enthält).
(Benutzer theshadowmonkey schlägt in einem Kommentar vor:
%Vor% was arithmetisch überprüft, ob $minute
ein Vielfaches von 5 ist, aber es gibt ein Problem damit. In dem Ausdruck in einem $(( ... ))
-Ausdruck werden Konstanten mit führenden Nullen als oktal behandelt; Wenn es momentan 8 oder 9 Minuten nach der Stunde ist, ist die Konstante 08
oder 09
ein Fehler. Du könntest das mit sed
umgehen, aber es lohnt sich wahrscheinlich nicht, da es andere Lösungen gibt.)
Ich werde Keith Thompson antworten:
Seine Lösung funktioniert perfekt alle fünf Minuten, funktioniert aber nicht alle 13 Minuten. Wenn wir $minutes % 13
verwenden, erhalten wir diesen Zeitplan:
Ich bin sicher, Sie bemerken das Problem. Wir können jede Frequenz erreichen, wenn wir die Minuten (, Stunden, Tage oder Wochen) seit Epoch zählen:
%Vor% date(1)
gibt das aktuelle Datum zurück, wir formatieren es als Sekunden seit Epoch ( %s
) und dann Wir machen grundlegende Mathematik:
Und Sie können diesen Ansatz mit stündlichen, täglichen oder monatlichen Cron-Jobs auf OpenShift verwenden:
%Vor% Beachten Sie, dass ich den Operator -ne
(ungleich) verwendet habe, um das Skript zu beenden, anstatt den Operator -eq
(equal) zu verwenden, um das Skript in die IF-Konstruktion einzubinden; Ich finde es praktisch.
Und denken Sie daran, den richtigen Ordner .openshift/cron/{minutely,hourly,daily,weekly,monthly}/
für Ihre Häufigkeit zu verwenden.
Sie können den minutigen Cron-Job verwenden. Die Jobs werden mit einer bestimmten Häufigkeit ausgeführt, und Sie können Ihren Job instrumentieren, um das Datum und / oder die Uhrzeit zu überprüfen, zu der der Job ausgeführt wird.
Hier finden Sie ein Beispiel für das Ausführen eines Jobs alle 5 Minuten. Fügen Sie den folgenden Codeausschnitt in eine ausführbare Datei unter dem Pfad .openshift/cron/minutely/awesome_job
ein, geben Sie die entsprechenden Berechtigungen chmod +x awesome_job
ein und fügen Sie ihn dann Ihrem Anwendungsrepository hinzu, aktivieren Sie ihn und drücken Sie.
Das Snippet
%Vor%Erläuterung:
-mmin +4
), wird Ihr 'last_run' angezeigt und jetzt wird die Datei 'last_run' gelöscht und neu erstellt und Ihre großartigen Befehle werden ausgeführt. Quelle (Offizielle Dokumente): Ссылка