systemd - Timer-Einheiten, die das Anacron-Verhalten imitieren

13

Ich muss eine Timer-Einheit für eine Maschine schreiben, die häufig ausgeschaltet wird (z. B. klassisches Desktop-Setup). Diese Zeitschaltuhr muss regelmäßig, aber nicht sehr oft (z. B. wöchentlich, monatlich) aktiviert werden.

Ich habe einige Ansätze gefunden, aber sie passen nicht wirklich zusammen:

  • Nach dem Manpages nur die OnBootSecund die OnStartupSecRichtlinien, wenn der konfigurierten Zeitpunkt in der Vergangenheit aktiviert werden. Ich habe auch einige Beispiele gefunden, bei denen eine Kombination dieser verwendet wurde OnActiveSec, um ein reguläres Ereignis zu definieren. Das Problem ist: Jedes Mal, wenn die Maschine hochgefahren wird, aktiviert der Timer die konfigurierte Einheit. Wenn Sie einen Timer haben, der EINMAL pro Woche / Monat laufen sollte, ist das viel zu oft. Zum Beispiel: Ich möchte nicht, dass meine Protokolle dreimal am Tag gedreht werden ...

  • Lösungen mit der OnCalendarRichtlinie. Wenn die Maschine zum konfigurierten Zeitpunkt ausgeschaltet wird (meistens um Mitternacht, da der Timer nach dem nächsten Start nicht aktiviert wird, wenn Sie die Stunde in der Zeitangabe weglassen, die standardmäßig auf 00:00:00 eingestellt ist). Zumindest habe ich das so verstanden. Ist das richtig ?

Hier kommt also die Frage:
Wird der Timer mit Kalenderereignissen direkt nach dem nächsten Start aktiviert, wenn die konfigurierte Zeit in der Vergangenheit liegt?
Wenn nicht: Gibt es eine Problemumgehung, um ein solches Verhalten zu erzielen?

mmh
quelle
Ok, ich bin mir dessen bewusst diese . Ist es noch der richtige Weg? Oder gibt es elegantere Lösungen? Ist etwas geplant, um die aktuelle Situation zu verbessern?
MMH

Antworten:

15

Diese Funktion wurde bereits mit der Direktive in systemd (ver> = 212) implementiert,Persistent= sodass Sie nur Persistent=truein die Unit-Datei einfügen müssen, während Sie mit der OnCalendar=Direktive das Datum und die Uhrzeit für die Ausführung des Jobs festlegen.

Hartnäckig =

Nimmt ein boolesches Argument an. Wenn true, wird die Zeit, zu der die Serviceeinheit zuletzt ausgelöst wurde, auf der Festplatte gespeichert. Wenn der Timer aktiviert ist, wird die Wartungseinheit sofort ausgelöst, wenn sie während der Zeit, in der der Timer inaktiv war, mindestens einmal ausgelöst worden wäre. Dies ist nützlich, um verpasste Serviceläufe bei ausgeschaltetem Computer nachzuholen. Beachten Sie, dass sich diese Einstellung nur auf Timer auswirkt, die mit OnCalendar = konfiguriert wurden.

Pedro
quelle
Ist es nicht das Gegenteil? OP fragt nach der Eliminierung zusätzlicher Läufe, die sich aus beiden OnBootSecund ergeben OnActiveSec. Persistentist es, einmal beim Booten zu starten, wenn mindestens ein Lauf wegen eines Ausfalls verpasst wurde?
X-Yuri
Nun, werden Sie wahrscheinlich bedeutete , dass es auf diese Weise .
X-Yuri
0

Laut dieser E-Mail in der Mailingliste von systemd-devel steht das gewünschte Verhalten auf der Roadmap und wird in Zukunft hinzugefügt.

mmh
quelle