
ich muss einen Cron-Job erstellen, um alle 40 Minuten ein Java-Programm auf einem Unix-Server auszuführen. Dabei muss Folgendes berücksichtigt werden: 1) Es soll von Montag bis Freitag von 8:30 bis 12:30 Uhr und von 14 bis 18 Uhr laufen. 2) Feiertage müssen berücksichtigt werden.
ich habe viel darüber gelesen und fand dies */30 8..13,14..19 * * 1..5 als die beste Lösung. Ich möchte wissen, ob Crontab das kann, was ich will, und wenn nicht, ob es möglich ist, einen Java- oder anderen Code zu schreiben, um das Urlaubsdatum zu überprüfen. Danke für Ihre Hilfe
Antwort1
CRON ist nicht so clever. Sie müssen entweder viele ähnliche Regeln haben oder etwas Maßgeschneidertes schreiben, das dies für Sie erledigt (aber seien Sie vorsichtig, Sie möchten kein Skript schreiben, das benutzerdefinierte Dinge als Root ausführt, ohne besonders darauf zu achten. Vergessen Sie das, Sie möchten kein Skript schreiben, das das tut, Punkt).
Antwort2
Wie James schon sagte, ist cron nicht wirklich schlau: Es ist gut darin, „diese Dinge zu diesen Zeiten immer und immer wieder zu tun, bis ich dir sage, dass du aufhören sollst“, aber es beachtet keine flexiblen Feiertage und ist auch nicht begeistert von „abgefahrenen“ Zeitangaben wie every 40 minutes
(um so etwas zu tun, sind eine Menge Crontab-Einträge erforderlich – Sie müssen praktisch für jeden Durchlauf einen erstellen).
Am besten kommen Sie wahrscheinlich mit cron „so nah wie praktisch möglich“ heran (also mit Ihrer obigen Regel, die „Jede halbe Stunde um HH:30 ausführen“ innerhalb der Beschränkungen von Teil 1) und lassen Ihr Skript dann selbst nach Ausnahmen (Feiertagen) suchen und entscheiden, ob es fortfahren soll/nicht.
Antwort3
Für das, was Sie wollen, ist das vielleicht übertrieben, aber Sie könnten Hudson verwenden, um die Jobs auszuführen. An sich erhalten Sie nicht sofort die Möglichkeit, die Jobs mit Ihren Zeitregeln auszuführen, aber Sie können Jobs mit einer beliebigen Anzahl von Methoden remote auslösen. Wenn Sie also ein Skript schreiben können, um den Inhalt einer Webseite zu ändern oder neue Dateien zu erstellen oder einen REST-Aufruf an Hudson durchzuführen oder ein Git-Check-in durchzuführen, wann immer Sie den Job ausführen möchten, haben Sie Glück. Sie erhalten auch eine bessere Protokollierung als mit Cron allein und können leicht benachrichtigt werden, wenn der Job fehlschlägt (per E-Mail, Jabber, IRC, Nabaztag ...).
Betrachten wir dies aus einer anderen Perspektive. Muss es wirklich gemäß den angegebenen Regeln ausgeführt werden? Was passiert, wenn Sie es stattdessen jede halbe Stunde ausführen? Was passiert, wenn Sie es zu Zeiten ausführen, die Sie nicht möchten?