ubuntuusers.de

Crontab Problem wenn der Tag auf einen 31. oder 1. fällt

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

Hakkai

Anmeldungsdatum:
1. November 2024

Beiträge: 3

Hallo alle, ich hab grad ein Problem mit einem Crontab welcher nicht auslösen sollte, dies aber tut wenn der trigger am 1. oder letzten Tag des Monats liegt. Es jeden 2. Donnerstag im Monat getriggert werden:

1 20 */15,*/16,*/17,*/18,*/19,*/20,*/21 * 4 echo $(date +\%d) d halfwipe_auto timer 1 minute later triggered >> ~/Steam/rust/scripts/custom_cron.log 2>&1;

Nun ist dies jedoch in meinen Logs erschienen: Do 31. Okt 20:00:03 CET 2024 rcon: players : 0 (50 max) (0 queued) (0 joining) 31 d halfwipe_auto timer 1 minute later triggered

Wir kann es sein, dass ein Crontab der nur am 15. - 21. nun am 31. ausgelöst wird? Es funktioniert komischerweise immer so wie erwartet wenn der Donnerstag, nicht am 1. oder letzen eines Monats liegt. Völlig unverständlich für mich. Bitte um Ratschläge

TK87

Anmeldungsdatum:
8. Juli 2019

Beiträge: 241

Wohnort: Aachen

Moin,

"*/15" heisst z.B. nicht "am 15. des Monats", sondern "alle 15 Tage".

Richtig müsste es so sein:

1
2
# m h  dom   mon dow  command
  1 20 15-21 *   4    ...

Gruß Thomas

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14262

TK87 schrieb:

Richtig müsste es so sein:

1
2
# m h  dom   mon dow  command
  1 20 15-21 *   4    ...

Zu deinem sagt der crontab guru:

“At 20:01 on every day-of-month from 15 through 21 and on Thursday.”
next at 2024-11-07 20:01:00

und zu dem des TE:

“At 20:01 on every 15th day-of-month, every 16th day-of-month, every
17th day-of-month, every 18th day-of-month, every 19th day-of-month,
 every 20th day-of-month, and every 21st day-of-month if it's on Thursday.”

Wird hier evtl. eine "durchschnittliche Monatslänge", von crontab berücksichtigt?

Hakkai

(Themenstarter)

Anmeldungsdatum:
1. November 2024

Beiträge: 3

Vielen Dank Thomas und TK87, ich werde dies so versuchen. Ob es funktioniert, weis ich dann wenn ein Donnerstag auf den 31. oder 1. fällt ☺

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9574

Wohnort: Münster

Hakkai schrieb:

[…]

1 20 */15,*/16,*/17,*/18,*/19,*/20,*/21 * 4 echo $(date +\%d) d halfwipe_auto timer 1 minute later triggered >> ~/Steam/rust/scripts/custom_cron.log 2>&1; 

[…] Wir kann es sein, dass ein Crontab der nur am 15. - 21. nun am 31. ausgelöst wird?

Du hast es so definiert. Eine Tagesangabe */15 steht für 1-31/15 und selektiert daher mindestens 1, 16, 31 (= Start 1, Schrittweite 15).

Lese den Artikel Cron, insbesondere Anmerkung 6 zu Tabelle 2.

Hakkai

(Themenstarter)

Anmeldungsdatum:
1. November 2024

Beiträge: 3

kB schrieb:

... und selektiert daher mindestens 1, 16, 31 (= Start 1, Schrittweite 15).

Das erklärt das Phänomen das ich hatte. Vielen Dank auch dir

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13140

Du könntest auch erwägen, zu Systemd-Timern umzuschalten. Das ist eigentlich der Weg, wie man es heutzutage macht.

TK87

Anmeldungsdatum:
8. Juli 2019

Beiträge: 241

Wohnort: Aachen

Hakkai schrieb:

Vielen Dank Thomas und TK87, ich werde dies so versuchen. Ob es funktioniert, weis ich dann wenn ein Donnerstag auf den 31. oder 1. fällt ☺

Wie lubux schon eingeworfen hat, wird das so auch nicht funktionieren, weil er es dann vom 15. bis 21. und an jedem Donnerstag ausführt.

Du musst das also entweder so lösen:

1
2
# m h  dom   mon dow  command
  1 20 15-21 *   *    [ $(date +\%w) == 4 ] && echo $(date +\%d) d halfwipe_auto timer 1 minute later triggered >> ~/Steam/rust/scripts/custom_cron.log 2>&1

.. oder halt wie rklm schon vorgeschlagen hat stattdessen eine Timer Unit verwenden, da geht das.

Gruß Thomas

Antworten |