Zwei systemd-Services die sich gegenseitig ausschließen
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Zwei systemd-Services die sich gegenseitig ausschließen
Hi Leute!
Ich habe einerseits regelmäßige snapshots von meinem btrfs-Filesystem laufen und andererseits stellte ich fest, dass regelmäßig ein btrfs balance die Performance von btrfs hoch hält.
Aber ein btrfs-snapshot und auch ein btrfs-send/receive zu machen nimmt schon ganz schön Ressourcen in Anspruch, da noch ein balance draufzuschießen macht das System unbenützbar...
Ich habe die backups/snapshots mittels eines systemd-service/timers gestartet.
Und ich möchte nun das balance ebenfalls mittels einem systemd-service mittels timer regelmäßig starten.
Wie gestalte ich nun die service-units so, dass das balance nicht gestartet wird, wenn ein backup/snapshot läuft bzw. umgekehrt... Geht das überhaupt?
Ist "Conflicts=" die Option der Wahl?
lg scientific
Ich habe einerseits regelmäßige snapshots von meinem btrfs-Filesystem laufen und andererseits stellte ich fest, dass regelmäßig ein btrfs balance die Performance von btrfs hoch hält.
Aber ein btrfs-snapshot und auch ein btrfs-send/receive zu machen nimmt schon ganz schön Ressourcen in Anspruch, da noch ein balance draufzuschießen macht das System unbenützbar...
Ich habe die backups/snapshots mittels eines systemd-service/timers gestartet.
Und ich möchte nun das balance ebenfalls mittels einem systemd-service mittels timer regelmäßig starten.
Wie gestalte ich nun die service-units so, dass das balance nicht gestartet wird, wenn ein backup/snapshot läuft bzw. umgekehrt... Geht das überhaupt?
Ist "Conflicts=" die Option der Wahl?
lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Re: Zwei systemd-Services die sich gegenseitig ausschließen
Nein, das stoppt das jeweils andere.Ist "Conflicts=" die Option der Wahl?
Man könnte das mit einem "systemctl is-active …" in ExecStartPre machen.
Unix is user-friendly; it's just picky about who its friends are.
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Zwei systemd-Services die sich gegenseitig ausschließen
Danke für den Hinweis! Das klingt vernünftig.
Dazu noch eine Frage. Ich habe eine Service-Unit namens
mkbackup@.service
und aktiviert habe ich sie mit
systemctl enable mkbackup@hourly.service
systemctl enable mkbackup@daily.service
systemctl enable mkbackup@weekly.service
Muss ich dann im Unit-File eine Abfrage mit systemctl is-active nach jedem einzelnen service machen?
Lg scientific
Dazu noch eine Frage. Ich habe eine Service-Unit namens
mkbackup@.service
und aktiviert habe ich sie mit
systemctl enable mkbackup@hourly.service
systemctl enable mkbackup@daily.service
systemctl enable mkbackup@weekly.service
Muss ich dann im Unit-File eine Abfrage mit systemctl is-active nach jedem einzelnen service machen?
Lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Zwei systemd-Services die sich gegenseitig ausschließen
So... wie kann ich das negierte Ergebnis abfragen?catdog2 hat geschrieben:Nein, das stoppt das jeweils andere.Ist "Conflicts=" die Option der Wahl?
Man könnte das mit einem "systemctl is-active …" in ExecStartPre machen.
Also, wenn ich die Abfrage mache
Code: Alles auswählen
ExecStartPre=/bin/systemctl is-active mkbackup.service
Aber ich will ja das Gegenteil davon erreichen... Der Service soll NICHT gestartet werden, wenn mkbackup.service läuft... aber ein systemctl is-not-active gibt es nicht... Das heißt, ich müsste irgendwie das Ergebnis negieren können in ExecStartPre...
Wie geht das?
lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Re: Zwei systemd-Services die sich gegenseitig ausschließen
Du könntest das Ergebnis „von Hand“ umdrehen:
Code: Alles auswählen
ExecStartPre=/bin/sh -c 'if /bin/systemctl --quiet is-active mkbackup; then /bin/false; else /bin/true; fi'
Manchmal bekannt als Just (another) Terminal Hacker.
Re: Zwei systemd-Services die sich gegenseitig ausschließen
Code: Alles auswählen
ExecStartPre=/bin/sh -c "!(/bin/systemctl is-active -q mkbackup.service)"
Unix is user-friendly; it's just picky about who its friends are.
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Zwei systemd-Services die sich gegenseitig ausschließen
Das scheint einmal zu funktionieren.
Nächste Stufe
Ich habe eigentlich ein Service, welches mkbackup@.service heißt.
Dieses wird über Timer in verschiedenen Intervallen gestartet.
mkbackup@hourly.service
mkbackup@daily.service
...
Kann ich eine Abfrage in die Service-Unit einbauen, welche bewirkt, dass z.B. das daily-Backup NICHT gestartet wird, wenn gerade das weekly oder monthly läuft?
Da ja alle über die selbe systemd-unit gestartet werden, denke ich mir, könnte es schwierig werden. Aber hat vielleicht jemand eine Idee zu dieser Aufgabe?
lg scientific
Nächste Stufe
Ich habe eigentlich ein Service, welches mkbackup@.service heißt.
Dieses wird über Timer in verschiedenen Intervallen gestartet.
mkbackup@hourly.service
mkbackup@daily.service
...
Kann ich eine Abfrage in die Service-Unit einbauen, welche bewirkt, dass z.B. das daily-Backup NICHT gestartet wird, wenn gerade das weekly oder monthly läuft?
Da ja alle über die selbe systemd-unit gestartet werden, denke ich mir, könnte es schwierig werden. Aber hat vielleicht jemand eine Idee zu dieser Aufgabe?
lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Re: Zwei systemd-Services die sich gegenseitig ausschließen
Man könnts so machen:
Code: Alles auswählen
ConditionPathExists=!/run/mybackup.lock
ExecStartPre=/bin/touch /run/mybackup.lock
ExecStopPost=/bin/rm /run/mybackup.lock
Unix is user-friendly; it's just picky about who its friends are.
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Zwei systemd-Services die sich gegenseitig ausschließen
Ah das klingt vernünftig!catdog2 hat geschrieben:Man könnts so machen:Code: Alles auswählen
ConditionPathExists=!/run/mybackup.lock ExecStartPre=/bin/touch /run/mybackup.lock ExecStopPost=/bin/rm /run/mybackup.lock
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Zwei systemd-Services die sich gegenseitig ausschließen
Und jetzt bräuchte ich noch eine Anregung... Schätze aber einmal, dass sich das mit systemd nicht wirklich machen lässt...
Ich habe die regelmäßigen Backups, die ich mache, und die jetzt nicht mehr gleichzeitig ausgeführt werden.
Dann mache ich täglich ein btrfs-balance (der Erfolg gibt mir recht, das System ist jetzt weit weniger träge!), welches ich auch mit den oben genannten Mechanismen ausschließe, dass gleichzeitig mit dem Backup läuft.
In der [Unit]-Section gibt es ja den Parameter "After="...
Wenn jetzt gerade ein Backup läuft, und es sollte das Balancing gestartet werden, so wird das momentan unterbunden. Kann ich das irgendwie anschließend laufen lassen? Der After-Parameter ist ja hier nicht brauchbar. Denn wenn ich den einführen würde, würde ja diese Unit jedesmal danach ausgeführt werden. Oder?
lg scientific
Ich habe die regelmäßigen Backups, die ich mache, und die jetzt nicht mehr gleichzeitig ausgeführt werden.
Dann mache ich täglich ein btrfs-balance (der Erfolg gibt mir recht, das System ist jetzt weit weniger träge!), welches ich auch mit den oben genannten Mechanismen ausschließe, dass gleichzeitig mit dem Backup läuft.
In der [Unit]-Section gibt es ja den Parameter "After="...
Wenn jetzt gerade ein Backup läuft, und es sollte das Balancing gestartet werden, so wird das momentan unterbunden. Kann ich das irgendwie anschließend laufen lassen? Der After-Parameter ist ja hier nicht brauchbar. Denn wenn ich den einführen würde, würde ja diese Unit jedesmal danach ausgeführt werden. Oder?
lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main