[SOLVED] systemd - unit nur über timer ausführen

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
grefabu
Beiträge: 22
Registriert: 25.10.2006 15:42:33

[SOLVED] systemd - unit nur über timer ausführen

Beitrag von grefabu » 15.04.2024 09:36:02

Moin,

ich möchte gerne über den systemd zeitgesteuert einen Rechner herunterfahren.
Bin nach diesem HowTo vorgegengen: https://linuxhandbook.com/schedule-shutdown/

Leider wird der angelegt Service bei jedem Booten ausgeführt, also das System direkt wieder heruntergefahren und nicht wie gewünscht zu einem über den Timer festgelegten Zeitpunkt.

Hier noch mal der angelegte Timer und der zugehörige Service:

Code: Alles auswählen

[Unit]
Description=Timer to shut down the system
Requires=shutdown.service

[Timer]
OnCalendar=*-*-* 17:01
Persistent=true

[Install]
WantedBy=timers.target

Code: Alles auswählen

[Unit]
Description=Service to Shutdown the system, run by a timer

[Service]
Type=oneshot
ExecStart=/usr/bin/logger 'shutdown.service - output'

[Install]
WantedBy=default.target
Ich habe auch schon versucht, bei der Service unit das WantedBy komplett herauszunehmen, ohne Erfolg.
Zuletzt geändert von grefabu am 16.04.2024 09:58:24, insgesamt 1-mal geändert.

grefabu
Beiträge: 22
Registriert: 25.10.2006 15:42:33

Re: systemd - unit nur über timer ausführen

Beitrag von grefabu » 15.04.2024 09:36:48

Ach ja, man könnte ja auch einen cronjob anlegen, das wäre aber zu leicht,...

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: systemd - unit nur über timer ausführen

Beitrag von mat6937 » 15.04.2024 09:38:44

grefabu hat geschrieben: ↑ zum Beitrag ↑
15.04.2024 09:36:02
Leider wird der angelegt Service bei jedem Booten ausgeführt, also das System direkt wieder heruntergefahren und nicht wie gewünscht zu einem über den Timer festgelegten Zeitpunkt.
Das wird daran liegen, weil Du die service-unit aktiviert hast. In deinem Fall darf nur die timer-unit aktiviert sein.
Zuletzt geändert von mat6937 am 15.04.2024 09:41:13, insgesamt 1-mal geändert.

grefabu
Beiträge: 22
Registriert: 25.10.2006 15:42:33

Re: systemd - unit nur über timer ausführen

Beitrag von grefabu » 15.04.2024 09:40:58

Hmm, ein systemctl diable shutdown.service hatte ich schon gemacht.

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: systemd - unit nur über timer ausführen

Beitrag von mat6937 » 15.04.2024 09:42:49

grefabu hat geschrieben: ↑ zum Beitrag ↑
15.04.2024 09:40:58
shutdown.service hatte ich schon gemacht.
Der Name shutdown für eine (user-)service-unit ist m. E. auch nicht gut.
Versuch mal mit "myshutdown.service" oder gleichwertig.

EDIT:

Versuch mal auch mit z. B.:

Code: Alles auswählen

/sbin/shutdown --no-wall -P +5
in der "ExecStart="-Zeile der deaktivierten service-unit. Wenn OK, kannst Du die Zeit evtl. ändern oder so lassen und die timer-unit anpassen.

Benutzeravatar
GregorS
Beiträge: 2637
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: systemd - unit nur über timer ausführen

Beitrag von GregorS » 15.04.2024 17:04:30

grefabu hat geschrieben: ↑ zum Beitrag ↑
15.04.2024 09:36:48
Ach ja, man könnte ja auch einen cronjob anlegen, das wäre aber zu leicht,...
Stimmt. Eine Zeile mit

Code: Alles auswählen

@reboot              sleep 7200; halt   # or whatever
Würde genügen. :mrgreen:

Gruß

Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])

KP97
Beiträge: 3446
Registriert: 01.02.2013 15:07:36

Re: systemd - unit nur über timer ausführen

Beitrag von KP97 » 15.04.2024 18:23:49

Schau hier mal rein, ich glaube, das ist besser beschrieben:
https://bbs.archlinux.org/viewtopic.php?id=235100

grefabu
Beiträge: 22
Registriert: 25.10.2006 15:42:33

Re: systemd - unit nur über timer ausführen

Beitrag von grefabu » 16.04.2024 09:57:54

Moin,

ich hatte das glaube ich zu meiner Zufriedenheit gelöst.
1. Punkt: kopiere nicht einfach Sacehn, die müssen nicht stimmen!

2. Punkt:
Im timer das persitent und requiere rausnehmen. Persistent holt ausgefallene Ausführungen nach und das require führt den service auch erst mal aus.
Der Timer sieht jetzt so aus:

Code: Alles auswählen

[Unit]
Description=Timer to shut down the system

[Timer]
OnCalendar=*-*-* 17:01
Unit=system_shutdown.service

[Install]
WantedBy=timers.target
Dann noch der service:

Code: Alles auswählen

[Unit]
Description=Service to Shutdown the system, run by a timer

[Service]
Type=oneshot
ExecStart=/usr/sbin/shutdown now
Nach den ersten Tests läuft es so wie ich es wollte.

Antworten