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?
Cron oder Anacron Job?
Re: Cron oder Anacron Job?
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.
Re: Cron oder Anacron Job?
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 (systemd-cron), das normale Paket anacron kann das laut manpage nicht!
EDIT: Es scheint eine Stolperfalle zu geben. Obiges gilt anscheinend nur für die cron/anacron-Implementierung von systemd (systemd-cron), das normale Paket anacron kann das laut manpage nicht!
Re: Cron oder Anacron Job?
Man könnte mit dem erwähnten yearly was mit systemd-Timern basteln, so in etwa:
plus
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
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
Code: Alles auswählen
~# systemctl enable yearly-reset-at-boot.service
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.
Re: Cron oder Anacron Job?
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!
Macht ohne Haftung funktioniert nicht!