Führen Sie den CRON-Job alle 5 Minuten auf OpenShift (Red Hat Cloud) aus.

7

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?

    
Eric Posen 14.04.2014, 22:36
quelle

3 Antworten

10

Ä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:

%Vor%

(Ü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.)

    
Keith Thompson 14.04.2014 22:46
quelle
8

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:

%Vor%

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:

%Vor%

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.

    
stefanmaric 01.08.2015 05:53
quelle
0

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:

  • Dieses Snippet erstellt tatsächlich eine leere Datei mit dem Namen 'last_run' nur für Notieren Sie sich den letzten Laufstatus und starten Sie dann Ihren Job.
  • In der nächsten Minute wird Ihr 'awesome_job' ausgeführt und nun wird versucht, die Datei 'last_run' in den letzten 4 Minuten zu finden. Aber dein Die Datei 'last_run' wurde erst vor einer Minute erstellt und die Bedingung schlägt daher fehl und wird beendet. Das geht weiter.
  • In der fünften Minute, während der Suche (mit -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): Ссылка

    
Ram Babu S 06.12.2016 22:08
quelle

Tags und Links