Cron oder Anacron Job?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Benutzeravatar
mosa
Beiträge: 316
Registriert: 29.10.2004 09:53:35

Cron oder Anacron Job?

Beitrag von mosa » 03.12.2020 11:39:07

Hallo, es geht darum (Stets Ende Jahr) ein Script zu starten.
Ziel ist es, dass der Rechner im neuen Jahr wieder wie neu konfiguriert ist.

Das Problem: man weiss im voraus nicht wann der Rechner wieder hochgefahren wird :|
Vielleicht Anfangs Januar, oder auch Mitte März?
Auf jeden Fall, muss das Skript STETS beim ersten Start im neuen Jahr ausgeführt werde.
Wie würdet ihr die Aufgabe lösen?

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Cron oder Anacron Job?

Beitrag von eggy » 03.12.2020 12:03:41

Nen Logfile anlegen in das ich 2019 reinschreibe, dann nen Task anlegen, der beim Boot testet, welches Jahr wir grade haben, und falls das aktuelle Jahr nicht dem im Logfile entspricht (genauer: größer ist), den Task ausführt. Je nachdem ob altes initsystem in /etc/init.d/bootmisc.sh oder via systemd unit.

Benutzeravatar
Tintom
Moderator
Beiträge: 3033
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Cron oder Anacron Job?

Beitrag von Tintom » 03.12.2020 12:26:10

Es gibt bei cron den alias @yearly, den auch anacron versteht. Wird die Maschine nach dem 01.01. (default für @yearly) hochgefahren registriert anacron das und führt den Job nachträglich aus.

EDIT: Es scheint eine Stolperfalle zu geben. Obiges gilt anscheinend nur für die cron/anacron-Implementierung von systemd (Debiansystemd-cron), das normale Paket Debiananacron kann das laut manpage nicht!

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Cron oder Anacron Job?

Beitrag von JTH » 03.12.2020 17:26:01

Man könnte mit dem erwähnten yearly was mit systemd-Timern basteln, so in etwa:

Code: Alles auswählen

~$ cat /etc/systemd/system/yearly-reset-at-boot.service
[Unit]
After=yearly-reset.timer
Before=multi-user.target
Description=Yearly reset at boot time
Wants=yearly-reset.timer

[Service]
ExecStart=/bin/systemctl stop yearly-reset.timer
Type=oneshot

[Install]
WantedBy=multi-user.target

Code: Alles auswählen

~$ cat /etc/systemd/system/yearly-reset.timer
[Unit]
Description=Yearly reset timer

[Timer]
AccuracySec=0
OnCalendar=yearly     # zum Ausprobieren z.B. auch hourly
Persistent=true

Code: Alles auswählen

~$ cat /etc/systemd/system/yearly-reset.service
[Unit]
Description=Yearly reset service

[Service]
ExecStart=/das/jaehrliche/reset-skript --mit --argumenten
Type=oneshot
plus

Code: Alles auswählen

~# systemctl enable yearly-reset-at-boot.service
Das würde das Reset wirklich nur beim Boot, niemals im laufenden Betrieb auslösen. Wenn letzteres akzeptabel wäre, könnte der yearly-reset-at-boot.service wegfallen.

Wenn das Reset größere Abhängigkeiten zu Services und ihrer Reihenfolge hat, könnte obiges auch etwas fummeliger werden.

Ob das die naheliegendste Lösung ist, ist ne andere Frage ;)
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
detix
Beiträge: 1703
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Cron oder Anacron Job?

Beitrag von detix » 03.12.2020 19:01:29

Wie wärs mit dem „at” -Befehl, aus der manpage:
For example, to run a job at 4pm three days from now, you would do at 4pm + 3 days, to run a job at 10:00am on July 31, you would do at 10am Jul 31 and to run a job at 1am tomorrow, you would do at 1am tomorrow.
If you specify a job to absolutely run at a specific time and date in the past, the job will run as soon as possible. For example, if it is 8pm and you do a at 6pm today, it will run more likely at 8:05pm.
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Antworten