ubuntuusers.de

Service nach dem Booten verzögern

Status: Gelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

jms3000

Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 869

Wohnort: Schwetzingen

Ich habe in einer Service-Datei drin "ExecStartPre=/bin/sleep 90". Aber leider verzögert das den Start des Services jedes mal. Ich möchte die Verzögerung aber nur nach dem Booten, sonst nicht. Wie kann ich das machen? In /proc/uptime habe ich die Zeit in Sekunden nach Booten. Wie baue ich daraus ein "if"?

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Nutze doch systemd/Timer Units dafür.

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 869

Wohnort: Schwetzingen

ChickenLipsRfun2eat schrieb:

Nutze doch systemd/Timer Units dafür.

Interessant. Dann hätte ich also die eigentlich Service-Unit bimbam.service und den Timer-Teil bimbam.timer? Wie verhindere ich dann, dass bimbam.service vom System automatisch gestartet wird?

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14296

jms3000 schrieb:

Wie verhindere ich dann, dass bimbam.service vom System automatisch gestartet wird?

Eine service-unit die via timer-unit gestartet wird, ist immer als disabled zu konfigurieren und wird deshalb vom System nie automatisch gestartet.

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

Aber leider verzögert das den Start des Services jedes mal.

Wie oft wird der Service denn gestartet, während der Rechner läuft?

Gruß, noisefloor

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14296

noisefloor schrieb:

Wie oft wird der Service denn gestartet, während der Rechner läuft?

BTW: Manche user konfigurieren dann noch einen cronjob, der die service-unit danach, warum auch immer, noch regelmäßig (re)starten soll, ... was aber nicht nötig wäre, denn eine timer-unit kann das besser (... d. h. verzögert starten und danach auch noch in regelmäßigen Zeitabständen ausführen/restarten). Z. B.:

:~ $ systemctl cat killyffmpeg.timer
# /etc/systemd/system/killyffmpeg.timer
[Unit]
Description=kill ffmpeg process if necessary

[Timer]
OnActiveSec=60
OnUnitActiveSec=180
AccuracySec=1
RandomizedDelaySec=60

[Install]
WantedBy=multi-user.target

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 869

Wohnort: Schwetzingen

noisefloor schrieb:

Hallo,

Aber leider verzögert das den Start des Services jedes mal.

Wie oft wird der Service denn gestartet, während der Rechner läuft?

Nur wenn es Probleme gibt. Aber dann möchte ich natürlich nicht 5 Minuten warten, bis alles wieder läuft.

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

ok. Nächste Frage: warum brauchst du die 90 Sekunden Verzögerung. Also auf welches Ereignis wartest du, was bis zum Ende des Bootvorgangs nicht eingtreten ist?

Gruß, noisefloor

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 869

Wohnort: Schwetzingen

ChickenLipsRfun2eat schrieb:

Nutze doch systemd/Timer Units dafür.

Funktioniert perfekt. Merci vielmal!

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 869

Wohnort: Schwetzingen

noisefloor schrieb:

Hallo,

ok. Nächste Frage: warum brauchst du die 90 Sekunden Verzögerung. Also auf welches Ereignis wartest du, was bis zum Ende des Bootvorgangs nicht eingtreten ist?

Nextcloud muss voll aktiv sein und Wifi muss Verbindung haben.

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

das lässt sich über Anhängigkeiten (Requires, After) in der Unit regeln. Verzögerungen via sleep oder ähnliches sind ein (schlechter) Workaround. Zeig' doch mal deine Unit, wie sie aktuell aussieht.

Gruß, noisefloor

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 869

Wohnort: Schwetzingen

noisefloor schrieb:

Hallo,

das lässt sich über Anhängigkeiten (Requires, After) in der Unit regeln. Verzögerungen via sleep oder ähnliches sind ein (schlechter) Workaround. Zeig' doch mal deine Unit, wie sie aktuell aussieht.

Nextcloud ist ein Snap, habe es nicht geschafft das mittels "After" zu regeln. Als Timer-unit funktioniert es jetzt gut und es hat fast keinen Nachteil.

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

Nextcloud ist ein Snap,

Das spielt keine Rolle - snaps werden ja auch über systemd gestartet bzw haben eine ganze Reihe von Units.

Ungetestet würde ich sagen, dass in deiner Unit die Direktiven Requires=snap.nextcloud.apache.service und After=network-online.target eigentlich dazu führen sollten, dass sie erst startet, wenn Nextcloud läuft.

Gruß, noisefloor

jms3000

(Themenstarter)
Avatar von jms3000

Anmeldungsdatum:
29. Januar 2015

Beiträge: 869

Wohnort: Schwetzingen

chatGPT hat gesagt ich bräuchte in einer Timer-Unit die Zeile "WantedBy=timers.target". Was ist davon zu halten?

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14296

jms3000 schrieb:

Was ist davon zu halten?

Nicht viel, denn wenn Du in deiner timer-unit nicht:

DefaultDependencies=no

gesetzt hast, ist:

Timer units will automatically have dependencies of type Requires= and After= on sysinit.target, a dependency of type Before= on timers.target, as well ...

Wenn Du den Eintrag mit "WantedBy=" (noch) machst, hat das zur Folge:

The primary result is that the current unit will be started when the listed unit is started, see the description of Wants= and Requires= in the [Unit] section for details.

Siehe dazu den Unterschied zwischen "Before=" und "Wants=/Requires=".

Quellen: https://wiki.ubuntuusers.de/systemd/Units/

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

https://man.archlinux.org/man/systemd.timer.5.en

https://wiki.archlinux.org/title/Systemd/Timers#Example

Antworten |