Wie führe ich jeden Samstag beim Booten mit systemd ein Skript aus?

Wie führe ich jeden Samstag beim Booten mit systemd ein Skript aus?
[Unit] 
Description=run test service

[Timer]
OnCalendar=Sat *-*-* 00:00:01
Unit=test.service
Persistent=true

[Install]
WantedBy=timers.target

Im obigen Beispiel funktioniert alles einwandfrei. Aber ich muss mein Linux-Betriebssystem vor 10 Uhr morgens booten.

Mein Ziel ist: Ich möchte mein Debian 10 jeden Samstag zu einer beliebigen Zeit booten und dann während des Bootens ein Skript ausführen. Wenn ich meine Linux-Maschine am Samstag (am selben Tag) zwei- oder dreimal neu starte, möchte ich das Skript nicht erneut ausführen, sondern nur einmal. Ist das mit systemd möglich?

Mein Gnu-Linux-Betriebssystem istDebian GNU/Linux 10 (Buster)und systemctl --version istsystemd 241 (241)

Antwort1

"Linux os" ist zu allgemeinum Ihr spezifisches System diagnostizieren zu können. Führen Sie bitte die folgenden vier Befehle aus und melden Sie die Ergebnisse (einschließlich Fehler, wenn der Befehl nicht verfügbar ist). Der Bericht gibt an, welche Variante von „Linux OS“ installiert ist und welche Version von systemd ausgeführt wird:

lsb_release -a
systemctl --version
/sbin/init --version
busctl --system get-property org.freedesktop.systemd1 \
                           /org/freedesktop/systemd1 \
                           org.freedesktop.systemd1.Manager \
                           Version

Auf einer aktuellen (Stand August 2019) Version von systemd

Stellen Sie Ihren Echtzeit-Timer so ein, dass er jederzeit am Samstag ausgelöst wird

OnCalendar=Sat *-*-* 00:00:01

Und entfernen Sie den monolithischen Timer

OnBootSec=2

Der Effekt von

Persistent=true

ist, dass das System versucht, das Skript einmal pro Woche nach 00:00:01 jeden Samstag auszuführen. Das Skript wird nur einmal jeden Samstag ausgeführt und das ist normalerweise beim ersten Booten. Es wird an jedem anderen Wochentag ausgeführt, wenn das System am Samstag nicht eingeschaltet war, und es wird um 00:00:01 ausgeführt, wenn das System am Freitag über Nacht eingeschaltet war.

Persistent=

Nimmt ein Boolean-Argument an. Wenn wahr, wird die Zeit, zu der die Service-Unit zuletzt ausgelöst wurde, auf der Festplatte gespeichert. Wenn der Timer aktiviert wird, wird die Service-Unit 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 Ausführungen des Dienstes nachzuholen, als die Maschine ausgeschaltet war. Beachten Sie, dass diese Einstellung nur Auswirkungen auf Timer hat, die mit OnCalendar= konfiguriert sind. Standardmäßig falsch.

verwandte Informationen