
Ich konvertiere eine SysV-Init-Style-Datei in eine Systemd-Unit-Datei und ihr Init-Abschnittsblock sieht folgendermaßen aus:
### BEGIN INIT INFO
# Provides: ifcheck
# Required-Start: $local_fs
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Network interfaces check & replace
# Description: Checks if the interfaces were corrupted or if the special section is missing. If so, a default version will be copied over.
### END INIT INFO
Ich weiß, dass die Runlevel 0-6 verschiedenen Systemd-Zielen entsprechen:
╔══════════════════════╦═══════════════════╗
║ Run Level (SysVinit) ║ Systemd Target ║
╠══════════════════════╬═══════════════════╣
│ Run level 0 │ poweroff.target │
├──────────────────────┼───────────────────┤
│ Run level 1 │ rescue.target │
├──────────────────────┼───────────────────┤
│ Run level 2 │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 3 │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 4 │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 5 │ graphical.target │
├──────────────────────┼───────────────────┤
│ Run level 6 │ reboot.target │
├──────────────────────┼───────────────────┤
│ Emergency │ emergency.target │
└──────────────────────┴───────────────────┘
(According to https://www.tecmint.com/change-runlevels-targets-in-systemd/ )
Aber ich habe noch nie S
zuvor einen Runlevel gesehen. Ich habe geseheneinige Definitionen, die besagen, dass es für Einzelbenutzer istwährendEs gibt andere, die es als Synonym für andere Runlevel definierenund weiterhinandere haben keine schlüssige Definition.
Ich weiß, dass die Version, mit der ich arbeite, höchstwahrscheinlich dieLinux Standard Base-Spezifikationdenn unmittelbar nach dem Init-Info-Block folgt die Beschaffung derlsb-Init-Funktionen(Quelle: . /lib/lsb/init-functions
). Außerdem läuft auf dem System Debian 8 Jessie.
Welches Ziel sollte ich in die entsprechende Systemd-Unit-Datei für den Runlevel einfügen S
?
Antwort1
S
hat keine direkte Entsprechung in systemd. Das systemd-sysv-generator
Programm verarbeitet solche van Smoorenburg rc
-Skripte nicht.
Debianverwendeteine gepatchte Version dieses Programms, die ein rc
Skript umschloss, das S
innerhalb einer Service-Einheit ohne Standardabhängigkeiten verwendet wurde und das von wanted-by war sysinit.target
. Das war nicht perfekt, aber dannalleder Funktionsweise systemd-sysv-generator
ist unvollkommen, da es keine allgemeingültige mechanistische Methode zum Übersetzen von van Smoorenburg rc
-Skripten gibt.
Die Debian-Systemd-Leute haben den Patch bereits im Juli 2016 abgeschafft, als sie glaubten, dass alle rc
in Debian verwendeten Van-Smoorenburg-Skripte S
durch richtige Service-Units ersetzt worden seien. Ihr Skript scheint selbst entwickelt zu sein.
In diesem Fall ist es besser, wenn Sie den S
Runlevel komplett vergessen. Meine fundierte Vermutung, die nur auf der Beschreibung basiert, ist, dass Sie eigentlich eine Service-Unit erstellen sollten, die:
DefaultDependencies=nein Nach=local-fs.target Vorher=Netzwerk-Vorher.Ziel Will=Netzwerk-Vorgabe.Zielund das ist
Wanted-By
evtl. auch was passendes basic.target
.
Je nachdem, was Ihr Dienst tatsächlich tut, kann diese Reihenfolge local-fs.target
auch übertrieben sein. Aber das können nur Sie selbst entscheiden.