Die Syntax, die Sie ausprobiert haben, ist tatsächlich mehrdeutig. Abhängig von der Anzahl der Tage im Monat, werden einige Monate an ungeraden Tagen und einige an geraden Tagen ausgeführt. Dies liegt daran, dass die Art und Weise, wie sie berechnet wird, die Gesamtzahl der Möglichkeiten aufnimmt und sie aufteilt. Sie können dieses seltsame Verhalten umgehen, indem Sie den Tagesbereich manuell angeben und entweder eine ungerade oder eine gerade Anzahl von Tagen verwenden. Da Skripte mit geraden Tagen niemals am 31. Tag längerer Monate ausgeführt werden, verlieren Sie nichts, wenn Sie 30 Tage als Basis für gerade Tage verwenden. Wenn Sie angeben, dass die Aufteilung so erfolgen soll, als gäbe es 31 Tage, können Sie ungerade Werte erzwingen -tägige Ausführung.
Die Syntax würde folgendermaßen aussehen:
# Will only run on odd days:
0 0 1-31/2 * * command
# Will only run on even days:
0 0 2-30/2 * * command
Ihre Besorgnis über Monate, die nicht die gleiche Anzahl von Tagen haben, ist hier nicht wichtig, da keine Monate MEHR Tage als diese haben und der Datumsbereich für den schlechten Februar nicht immer mit dem oder den letzten beiden Tagen übereinstimmt, aber es schadet nichts es aufgelistet.
Das einzige "gotcha" für diesen Ansatz ist, dass, wenn Sie sich in einem ungeraden Tageszyklus befinden, nach Monaten mit 31 Tagen Ihr Befehl auch am Ersten des Monats ausgeführt wird. Wenn Sie einen geraden Zyklus erzwingen, führt jedes Schaltjahr zu einem dreitägigen Zyklus und Ende Februar. Sie können die Tatsache nicht wirklich umgehen, dass ein regelmäßiges Muster für "jeden zweiten Tag" nicht immer auf gerade oder ungerade Tage in jedem Monat fällt, und auf jede Weise, die Sie dies erzwingen, wird es entweder einen zusätzlichen Lauf geben oder einen Lauf dazwischen verpassen Monate mit fehlgeschlagenen Tageszählungen.