Ist es möglich, ein Cron-Skript-Set so zu versetzen, dass es alle 5 Minuten ausgeführt wird?
Ich habe zwei Skripte, Skript 1 sammelt einige Daten aus einer Datenbank und fügt sie in eine andere ein, Skript 2 holt diese Daten und viele andere Daten heraus und erstellt daraus hübsche Berichte. Beide Skripte müssen alle 5 Minuten ausgeführt werden. Ich möchte Skript 2 um eine Minute versetzen, damit aus den neuen Daten ein Bericht erstellt werden kann. Ich möchte, dass Skript eins :00, :05, :10, :15 [...]
und Skript zwei zu :01, :06, :11, :16 [...]
jeder vollen Stunde ausgeführt werden. Die Skripte sind nicht voneinander abhängig, und Skript 2 muss unabhängig davon ausgeführt werden, ob Skript 1 erfolgreich war oder nicht. Es wäre jedoch nützlich, wenn die Berichte die neuesten Daten enthalten könnten. Ist das mit cron möglich?
Post;
Ich habe darüber nachgedacht, beide Befehle in einem Shell-Skript zu verwenden, damit sie sofort nacheinander ausgeführt werden, aber das würde nicht funktionieren. Manchmal kann es passieren, dass Skript 1 nicht mehr auf externe APIs usw. wartet. Die Ausführung kann also bis zu 15 Minuten dauern Skript 2 muss alle 5 Minuten ausgeführt werden. Wenn Sie dies tun, wird die Ausführung von Skript 2 gestoppt / verzögert. Wenn ich dies in Cron festlegen könnte, würde Skript 2 ausgeführt, unabhängig davon, was Skript 1 ausführt
Das Minuten-Eingabefeld für crontab akzeptiert einen "Inkremente von" -Operator, der etwas verwirrend ist, weil es so aussieht, als ob es ein mathematischer "Division durch" -Operator sein sollte, aber nicht. Sie werden am häufigsten feststellen, dass es wie folgt verwendet wird. Beachten Sie, dass dies keine durch fünf teilbaren Zahlen findet, sondern jeden fünften Punkt aus einer Menge entnimmt:
Dies weist cron an, jedes fünfte Element (
/5
) aus dem Satz von Minuten 0-59 (*
) zuzuordnen, aber Sie können den Satz folgendermaßen ändern:Dies würde jeden fünften Gegenstand aus dem Satz 1-59 nehmen und Ihren Befehl bei den Minuten 6, 11, 16 usw. ausführen.
Wenn Sie mehr feinkörnige Offsets als eine Minute benötigen, können Sie diese mit dem Befehl sleep als Teil Ihrer crontab wie folgt hacken:
Dadurch wird Ihr Job alle fünf Minuten ausgeführt, der Befehl wird jedoch erst 15 Sekunden nach der Minute gestartet. Für Jobs mit kurzen Laufzeiten, bei denen es entscheidend ist, ein paar Sekunden nach etwas anderem zu sein, aber Sie nicht eine volle Minute zu spät kommen möchten, ist dies ein einfacher Hack.
quelle
Sie können einen Zeitversatz mit dem Symbol + angeben. Um beispielsweise um auszuführen
:01, :06, :11, :16 [...]
, erstellen Sie eine Aufgabe wiequelle
Das hat bei mir funktioniert:
Wobei 1 die versetzten Minuten sind. Wenn Sie also drei Minuten versetzen möchten:
Ich habe dies in AWS Zeitplaneinstellungen arbeiten
quelle