Cronjob alle 45 Tage ausführen möglich? (ca. 1 ½ Monate)

Cronjob alle 45 Tage ausführen möglich? (ca. 1 ½ Monate)

Nach dem Lesen der Crontab-Dokumentation fällt mir keine Möglichkeit ein, den folgenden Zeitplan zu notieren: Skript genau alle 45 Tage ausführen.

Kennt jemand eine elegante Lösung? Danke.

Antwort1

Da sich ein Zeitraum von 45 Tagen nicht gut in Wochen, Monate oder Jahre des gregorianischen Kalenders aufteilen lässt, gibt es keine Möglichkeit, die Ausführung Ihres Skripts einzuschränken und es trotzdem an allen gewünschten Tagen auszuführen.

Aus diesem Grund muss Ihr Befehl jeden Tag ausgeführt werden und an 44 von 45 Tagen muss der Befehl selbst ohne Aktion zurückgegeben werden.

Wenn das Skript beispielsweise um 03:17 ausgeführt werden soll, könnte der Befehl folgendermaßen aussehen:

17 3 * * * /usr/local/bin/your-script

Und innerhalb des Skripts könnten Sie Folgendes tun:

#!/bin/bash
if [[ $[($(date +%s)/86400)%45] != 0 ]]
then
    return
fi

real things happen here

Der != 0Teil kann eine andere Nummer verwenden, je nachdem, an welchem ​​Tag er zum ersten Mal ausgeführt werden soll. Und Sie können diese zusätzliche Logik auch in die Crontab statt in das Skript einfügen, obwohl ich es persönlich lesbarer finde, wenn es im Skript ausgeführt wird.

Beachten Sie, dass Sie, wenn Ihre Zeitzone die Sommerzeit verwendet, möglicherweise die oben genannten Einstellungen anpassen müssen, um zu vermeiden, dass sich der Zeitplan beim Umstellen der Uhr um einen Tag verschiebt. Die genauen Details hängen davon ab, in welcher Zeitzone und zu welcher Tageszeit Sie Ihr Skript ausführen möchten.

Antwort2

Möglicherweise müssen Sie zwei Cronjob-Einträge verwenden. Der erste ist für einen Monat und der zweite für 45 Tage.

für jeden Monat verwenden Sie den folgenden Cron

0 0 1 * *  your_script

und 45 Tage dieser Cron-Eintrag

10 13 * * *  test $(( `date +\%s`/24/60/60\%45 )) = 41 && your_script

Ich habe eine Referenz von unten Link für 45 Tage Cron Scheduling

https://stackoverflow.com/questions/8699075/how-to-set-cron-job-for-every-45-days

verwandte Informationen