anacron: "monthly" wirklich monatlich?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
buhtz
Beiträge: 1208
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

anacron: "monthly" wirklich monatlich?

Beitrag von buhtz » 27.06.2023 09:27:08

Ich versuche die Internas von cron und anacron zu verstehen. Meines Wissens wird Aanacron von cron gestartet. Unter Debian sieht die /etc/crontab in der Regel so aus, wobei ich im Folgenden auf die letzte Zeile eingehen möchte.

Code: Alles auswählen

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
Dazu finde ich auch auch noch /etc/cron.monthly/0anacron, das am 1. Tag jeden Monats in jedem Jahr um 6:52 ausgeführt wird. Darin ist der Aufruf anacron -u cron.monthly, der laut manpage aktualisiert dies nur die Zeitstempel, aber führt keine Jobs aus. Das soll hier nicht der Kern meiner Frage sein, aber ich verstehe diesen Punkt ehrlich gesagt auch nicht: Wer führt den dann die Montly jobs aus?

Worauf ich hinaus möchte ist die Zeitperiode: Der 1. Tag in jedem Monat.

Nehmen wir an der Rechner war am 1. Tag um 6:52 nicht eingeschaltet, sondern erst wieder am 15. des Monats. Irgendwie, holt Anacron den monthly Job ja dann nach. Etwa 15 Tage später, am nächsten 1. des Monats, wird wieder das obige monthly Script ausgeführt, ein Monat ist aber noch nicht vergangen, also wird der Job dahinter nicht ausgeführt. Dann dauert es aber wieder einen Monat bis zum nächsten 1. Tag, bis der Job wieder ausgeführt wird. Dann sind aber schon grob 1,5 Monate und nicht nur ein Monat vergangen. Es ist also nicht wirklich monthly.

Aber sicher verstehe ich da nur was falsch.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

VS2FreeUsers
Beiträge: 58
Registriert: 26.06.2023 09:09:40
Lizenz eigener Beiträge: GNU General Public License

Re: anacron: "monthly" wirklich monatlich?

Beitrag von VS2FreeUsers » 27.06.2023 09:34:30

Hallo,

soweit ich weiß führt run-parts alle scripte innerhalb eines Verzeichnisses aus, wodurch dann auch anachron mit gestartet wird.
vs2-free-users community

#vs2-free-users #VS2FreeUsers

buhtz
Beiträge: 1208
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: anacron: "monthly" wirklich monatlich?

Beitrag von buhtz » 27.06.2023 09:43:25

VS2FreeUsers hat geschrieben: ↑ zum Beitrag ↑
27.06.2023 09:34:30
soweit ich weiß führt run-parts alle scripte innerhalb eines Verzeichnisses aus, wodurch dann auch anachron mit gestartet wird.
So verstehe ich das auch. Aber bei meinem Beispiel, tut es das nicht jeden Monat, sondern nach 1,5 Monaten.
  1. Am 1. Januar 6:52 ist der Rechner eingeschaltet. Monthly jobs werden ausgeführt.
  2. Am 1. Februar 6:52 ist der Rechner aus. Keine Jobs.
  3. Am 15. Februar fährt der Rechner erstmalig (seit dem 1. Februar) wieder hoch. Die Jobs vom 1. Februar werden nachgeholt.
  4. Am 1. März um 6:52 werden die Monthly Jobs überprüft, aber nicht ausgeführt, weil sie ja erst vor ca 2 Wochen (am 15. Februar) ausgeführt wurden.
  5. Am 1. April um 6:52 sind bereits 1,5 Monate bzw. ca 6 Wochen vergangen. Dann werden die Monthly Jobs wieder ausgeführt.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

mludwig
Beiträge: 807
Registriert: 30.01.2005 19:35:04

Re: anacron: "monthly" wirklich monatlich?

Beitrag von mludwig » 27.06.2023 09:57:23

In der Manpage von anacron steht, dass die debianspezifische Standardkonfig folgendermaßen vorgeht:
Auf Debian-basierten Systemen wird Anacron jeden Tag stündlich zwischen 7.30 Uhr und 23.30 Uhr lokaler Zeit aktiviert. Das geschieht auf Systemen ohne Systemd über einen Cron-Auftrag und auf Systemen mit Systemd über einen Systemd-Timer. Bei der Aktivierung prüft Anacron, ob eventuell Aufträge übergangen worden sind. In solchen Fällen werden diese Aufträge nach einer kurzen Zeitspanne gestartet.
und in /etc/anacrontab

Code: Alles auswählen

# These replace cron's entries
1       5       cron.daily      run-parts --report /etc/cron.daily
7       10      cron.weekly     run-parts --report /etc/cron.weekly
@monthly        15      cron.monthly    run-parts --report /etc/cron.monthly
die crontab selbst scheint daher überschrieben zu werden ...

Ich hatte das so verstanden, dass (wegen ausgeschalteten PC) nicht ausgeführte Aufträge nachgeholt werden, aber deswegen nicht die nächste Ausführung unterbleibt. D. h. wenn am 15. des Monats ein job lief, der nächste einfach am 1. des Folgemonats kommt, obwohl erst 14 oder 15 Tage vergangen sind.

tobo
Beiträge: 2346
Registriert: 10.12.2008 10:51:41

Re: anacron: "monthly" wirklich monatlich?

Beitrag von tobo » 27.06.2023 10:57:12

mludwig hat geschrieben: ↑ zum Beitrag ↑
27.06.2023 09:57:23
Ich hatte das so verstanden, dass (wegen ausgeschalteten PC) nicht ausgeführte Aufträge nachgeholt werden, aber deswegen nicht die nächste Ausführung unterbleibt. D. h. wenn am 15. des Monats ein job lief, der nächste einfach am 1. des Folgemonats kommt, obwohl erst 14 oder 15 Tage vergangen sind.
Genau das passiert nicht: Wenn am 15. (Januar/Febuar) ein monthly-Anacronjob ausgeführt wird, dann wird das neue Datum ausgerechnet, bezogen auf die Anzahl der Tage des nächsten Monats. Das nächste Datum ist dann der 12/15 (Februar/März). Ist der Rechner dann ausgeschaltet, startet der Anacronjob zum nächstmöglichen Zeitpunkt (Rechnerstart + Verzögerungsdauer). Von diesem neuen Datum wird dann der nächste Zeitpunkt zur Ausführung berechnet.

buhtz
Beiträge: 1208
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: anacron: "monthly" wirklich monatlich?

Beitrag von buhtz » 27.06.2023 12:37:58

tobo hat geschrieben: ↑ zum Beitrag ↑
27.06.2023 10:57:12
Das nächste Datum ist dann der 12/15 (Februar/März).
Aber wie wird dass dann ausgeführt, wenn in der /etc/crontab doch immer nur am 1. eines jeden Monats die monthly jobs ausgeführt werden?
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

tobo
Beiträge: 2346
Registriert: 10.12.2008 10:51:41

Re: anacron: "monthly" wirklich monatlich?

Beitrag von tobo » 27.06.2023 13:30:10

buhtz hat geschrieben: ↑ zum Beitrag ↑
27.06.2023 12:37:58
tobo hat geschrieben: ↑ zum Beitrag ↑
27.06.2023 10:57:12
Das nächste Datum ist dann der 12/15 (Februar/März).
Aber wie wird dass dann ausgeführt, wenn in der /etc/crontab doch immer nur am 1. eines jeden Monats die monthly jobs ausgeführt werden?
Hast du dir den Befehl

Code: Alles auswählen

test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
eigentlich auch mal genauer angesehen? Der ausführende Part wird ausgeführt, wenn kein anacron existiert. Anacron richtet sich nicht nach Zeitpunkten, sondern nach Zeitspannen - relevant ist die letzte Ausführung und das Intervall.

Edit:
Was das initiale Starten von Anacron angeht, da gibt wie üblich die manpage Asukunft:
man anacron hat geschrieben: On Debian-based systems, anacron will be activated hourly every day from 07:30 local time to 23:30 local time through cron job (on non-systemd systems where cron is installed and enabled) or systemd timer (on systemd-based systems). On activation, anacron will check if it missed some jobs. If yes, it will start those jobs after a short period of time.

Antworten