Gerne, ein paar Kleinigkeiten noch einmal:
Ulidor hat geschrieben:[…]
Wie auch immer, das Problem mit der fehlenden HOME-Variablen scheint noch komplizierter zu sein. Ich hatte die Unit mal so verändert, um sie in die Shutdown-Targets einzubinden[…]
Alternativ könntest du auch im Abschnitt [Service] eine Zeile
Code: Alles auswählen
Environment="UNISON=/root/00/system/partback/.unison", "HOME=/root"
hinzufügen.
Ulidor hat geschrieben:
Erstaunlich finde ich, dass anscheinend alle nachfolgenden Shutdown-Prozesse auf mein Skript warten, obwohl es ja relativ lange läuft. Aber gut so, sonst würde ich meine Meldungen ja nicht verfolgen können.
Das passiert wegen der Zeile After=basic.target so. Das bedeutet beim Hochfahren (in dem Fall egal, aber ich schreibe es der Vollständigkeit halber) wird deine unit erst gestartet nachdem basic.target bereits „läuft“ und beim Herunterfahren bereits beendet (dh dein Skript gestartet) solange basic.target
noch läuft.
Alle Dienste und sonstigen units, die Teil von basic.target sind müssen beim Herunterfahren also auf dein Skript warten, welche das sind zeigt dir die Zeile After=… (Requires=… und Wants=… spielen vielleicht auch noch mithinein, obwohl sie laut manpage keinen Einfluss auf die Reihenfolge haben) der Ausgabe von
Ulidor hat geschrieben:
Wie ich es hinbekomme, dass meine Unit an einer bestimmten Stelle beim Shutdown gestartet wird, ist mir noch unklar, weil ich das Prinzip der Abhängigkeiten noch gar nicht durchschaue.
Und wenn ich es denn soweit hätte, dass sie beim Hochfahren z.B. direkt vor der grafischen Oberfläche gestartet würde, hieße es dann zwangsläufig, dass mein Skript beim Herunterfahren gleich nach dem Beenden der grafischen Oberfläche gestartet würde? Fürs Shutdown gibt es doch eigene Targets, mit vermutlich eigenen Abhängigkeiten.
So wie es jetzt ist passt das schon ganz gut glaube ich. Immerhin wird dein Skript beim Herunterfahren sehr früh gestartet ohne dass das Beenden der grafischen Oberfläche auf dein Skript warten müsste, was uU den Nachteil hätte, das du die Meldungen erst wieder nicht zu Gesicht bekämst.
Du kannst der Zeile After=… auch weitere units/Dienste hinzufügen, um das Skript beim Herunterfahren noch früher zu starten und du darfst nicht vergessen, dass die Reihenfolge gedanklich umdrehen musst:
Das "After=" bezieht sich auf das Hochfahren, beim Herunterfahren ist die Reihenfolge anders herum, je früher du es beim Herunterfahren also ausführen willst umso mehr Dienste oder um so umfangreichere targets könntest du in "After=" hineinschreiben. "Before=" hat beim Herunterfahen den gegenteiligen Effekt, es bedeutet, dass der Dienst beim Start früher gestartet wird und beim Herunterfahren später als die angegebenen units beendet wird.
(und auch nicht vergessen, das dein Skript das "Beenden" deiner service-unit darstellt und nicht etwas das starten!)