So setzen Sie die verbleibende Zeit des systemd-Benutzertimers zurück

So setzen Sie die verbleibende Zeit des systemd-Benutzertimers zurück

Wie kann ich die verbleibende Zeit eines Systemd-Benutzertimers zurücksetzen?

Ich habe einen Benutzer-Systemd-Dienst:

[Unit]
Description=Remind to a take break

[Service]
ExecStart=/opt/scripts/break_reminder
Environment=PATH=/sbin:/bin:/usr/bin:/usr/sbin:/opt/scripts

[Install]
WantedBy=default.target

und ein Benutzer-Systemd-Timer

[Unit]
Description=Remind to a take break

[Timer]
OnStartupSec=0min
OnUnitActiveSec=30min

[Install]
WantedBy=timers.target

Bearbeiten: Das Neustarten des Timers sowohl durch Neustart als auch durch Stopp + Start setzt die verbleibende Zeit nicht zurück.

$ systemctl --user status break_reminder.timer 
● break_reminder.timer - Remind to take break
     Loaded: loaded (/home/adam/.config/systemd/user/break_reminder.timer; enabled; vendor pr>
     Active: active (waiting) since Sun 2021-05-30 16:19:00 CEST; 3h 48min ago
    Trigger: Sun 2021-05-30 20:24:05 CEST; 16min left
   Triggers: ● break_reminder.service

May 30 16:19:00 archadam systemd[383]: Started Remind to take break.

$ systemctl --user restart break_reminder.timer
$ systemctl --user status break_reminder.timer 
● break_reminder.timer - Remind to take break
     Loaded: loaded (/home/adam/.config/systemd/user/break_reminder.timer; enabled; vendor pr>
     Active: active (waiting) since Sun 2021-05-30 20:07:24 CEST; 1s ago
    Trigger: Sun 2021-05-30 20:24:05 CEST; 16min left
   Triggers: ● break_reminder.service

May 30 20:07:24 archadam systemd[383]: Stopping Remind to take break.
May 30 20:07:24 archadam systemd[383]: Started Remind to take break.

$ systemctl --user stop break_reminder.timer  
$ systemctl --user status break_reminder.timer
○ break_reminder.timer - Remind to take break
     Loaded: loaded (/home/adam/.config/systemd/user/break_reminder.timer; enabled; vendor pr>
     Active: inactive (dead) since Sun 2021-05-30 20:07:32 CEST; 1s ago
    Trigger: n/a
   Triggers: ● break_reminder.service

May 30 20:07:24 archadam systemd[383]: Stopping Remind to take break.
May 30 20:07:24 archadam systemd[383]: Started Remind to take break.
May 30 20:07:32 archadam systemd[383]: break_reminder.timer: Deactivated successfully.
May 30 20:07:32 archadam systemd[383]: Stopped Remind to take break.

$ systemctl --user start break_reminder.timer 
$ systemctl --user status break_reminder.timer
● break_reminder.timer - Remind to take break
     Loaded: loaded (/home/adam/.config/systemd/user/break_reminder.timer; enabled; vendor pr>
     Active: active (waiting) since Sun 2021-05-30 20:07:39 CEST; 2s ago
    Trigger: Sun 2021-05-30 20:24:05 CEST; 16min left
   Triggers: ● break_reminder.service

May 30 20:07:39 archadam systemd[383]: Started Remind to take break.

Antwort1

OnUnitActiveSecbindet an die letzte Aktivierungszeit von break_reminder.service.

OnUnitActiveSec=
Definiert einen Timer relativ zum Zeitpunkt der letzten Aktivierung der Einheit, die die Timereinheit aktiviert.

(systemd.timer-Manpage)

Um die verbleibende Zeit von zurückzusetzen break_reminder.timer, müssen Sie den letzten Aktivierungszeitstempel von zurücksetzen break_reminder.service.

Leider scheint es keine Möglichkeit zu geben, diesen Zeitstempel zurückzusetzen, außer durch das tatsächliche Starten der Serviceeinheit. ( systemctl set-propertykann den Zeitstempel nicht ändern und wird weder von systemctl reset-failednoch systemctl cleanvon beeinflusst systemctl daemon-reexec).

Antwort2

Starten Sie den Dienst neu:

# systemctl restart break_reminder.timer

und sehen Sie, ob das funktioniert.

Wenn dies nicht funktioniert, versuchen Sie einen erzwungenen Neustart:

# systemctl stop break_reminder.timer
# systemctl start break_reminder.timer

und lassen Sie es uns wissen.

verwandte Informationen