Ich habe ein Cron-Setup, um täglich um 22 Uhr ein Bash-Skript auszuführen. Ich habe ein weiteres Cron-Setup, das monatlich am 1. des Monats ausgeführt wird. Beide Cron starten ein Bash-Skript, und der einzige Unterschied im Bash-Skript ist das Argument, das sie an das zugrunde liegende Java-Programm übergeben (Emulation des Befehlszeilenstarts des Java-Programms).
Das Problem ist, dass ich die tägliche Cron am 1. des Monats irgendwie deaktivieren muss, damit beide nicht versuchen, am selben Tag zu laufen. Ist das automatisch möglich?
Ich nehme an, ich kann ein anderes Bash-Skript erstellen, um das Cron vor dem ersten zu bearbeiten, und danach erneut, um die Dinge wieder einzurichten, aber das scheint ... unrein.
shell-script
cron
SnakeDoc
quelle
quelle
Antworten:
Ähnlich wie bei der von @StephaneChazelas in den Kommentaren vorgeschlagenen Lösung können Sie den Tagesbereich im 3. Feld als Bereich für den Cron angeben, auf dem Sie jeden Tag außer dem 1. des Monats ausführen möchten.
Die folgenden zwei Einträge würden das erreichen, wonach Sie suchen:
quelle
Der einfachste Weg, damit umzugehen, ist nur ein Cron-Eintrag. Ändern Sie das Bash-Skript, um das Datum zu überprüfen. Wenn es der 1. des Monats ist, rufen Sie das Java-Programm mit monatlichen Parametern auf, andernfalls rufen Sie das Programm mit den täglichen Parametern auf.
Das Ändern des Skripts vereinfacht den Vorgang, da das Skript als Dokument besser beschreibt, was passiert, ohne dass zusätzliche Informationen in einer Cron-Tabelle erforderlich sind.
Die Skript-Mods könnten ungefähr so aussehen:
quelle
Ich denke, mit Ganzzahlvergleich, wenn korrekter
Datum '+% d' gibt 01 statt 1 zurück, daher ist die Verwendung von == string compareaison falsch
stattdessen
quelle