Kennt systemd noch Runlevel?

17

Hat systemd noch das Konzept von Runlevels? Zum Beispiel ist es sinnlos zu benutzen telinit <number>?

Drpaneas
quelle
2
Mögliches Duplikat von Runlevel ändern mit systemd
Stephen Harris
Ich kenne die Antworten unten nicht, aber in RHEL / Centos 7.6 init 1oder init 3oder init 5oder init 6oder init 0oder benehme runlevelich mich immer noch so, wie sie es immer getan haben, und das ist alles, was mich interessiert. Viele einfache Syntax dannsystemctl blabla blabla.blabla
ron

Antworten:

14

SystemD Run-Level Low-Down

Innerhalb des SystemD (Aemon) werden Runlevel als "Targets" angezeigt. Das Konzept ist noch vorhanden, aber der Workflow, um das gewünschte Ergebnis für Ihre Anforderung zu erzielen, ist unterschiedlich.

Das beigefügte sollte dieses Problem klären.

Wie ändere ich den aktuellen Runlevel?

$ systemctl isolate runlevelX.target

Wie ändere ich das Standard-Runlevel für den nächsten Start?

# Create a symlink
$ ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  • ln -sf TARGET DESTINATION
  • -s schafft symbolische Verbindung
  • -f Entfernt die vorhandene Zieldatei

ODER (wie @centimane vorschlug) benutze einfach den "gesegneten" systemdBefehl:

systemctl set-default [target name].target

Wie identifiziere ich den aktuellen Runlevel?

$ systemctl list-units --type=target
Tyler Maginnis
quelle
Willkommen bei Unix & Linux! Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
slm
Kann ich trotzdem mit dem Befehl init zwischen Runleveln wechseln?
drpaneas
2
Wenn Ihr Systemd-Paket mit SysV-kompatibler Unterstützung erstellt wurde, enthält es einen Telinit-Symlink zur Systemd-Binärdatei, die, wenn sie als Telinit bezeichnet wird, Runlevel 0-6 auf Systemd-Ziele abbildet. Überprüfen Sie Telinit (8) auf eine Liste dieser Zuordnungen .
Wieland
2
Um das Standardziel zu ändern, sollten Sie systemctl set-default [target name].targetden Link nicht manuell erstellen, sondern verwenden.
Centimane
12

Nein. Wie die System-Leute selbst zweimal geschrieben haben, einmal in ihrem telinitHandbuch und einmal in ihrem runlevelHandbuch, sind Runlevel "obsolet". Sie können Runlevel vergessen.

Diese Dinge gibt es in systemd überhaupt nicht, abgesehen von ein paar Kompatibilitätsscheiben.

  • Es gibt einige symbolische Links für Zielnamen, aber diese Ziele werden von systemd proper niemals verwendet.
    • Vielmehr verwendet der Bootstrap-Prozess a default.target(und von dort eines oder beide von a graphical.targetund a multi-user.target), a rescue.targetoder an emergency.target. Und das Herunterfahren beinhaltet a shutdown.target, a reboot.target, a halt.targetoder a poweroff.target. Weder beim Booten noch beim Herunterfahren sind Run-Level-Ziele beteiligt .
    • Der telinitBefehl, von dem man annehmen könnte, dass er die symbolischen Kompatibilitätslinks verwendet, um seine Befehlszeilenargumente zuzuordnen, tut dies auch nicht. Es gibt eine fest verdrahtete Tabelle im Quellcode des telinitProgramms, und die Zahlen 2, 3, 4, und 5als Argument für den Befehl werden abzubilden fest verdrahtet zu multi-user.targetund graphical.target.
    • systemd-update-utmp hat auch eine interne festverdrahtete Tabelle.
  • Es gibt keine "Init-Tabelle" für Runlevel-Inhalte. systemd ist nur mit van Smoorenburg kompatibel rc, nicht mit van Smoorenburg init.
  • Es gibt keinen "aktuellen Run Level" -Wert, der von systemd selbst verwaltet wird. Vielmehr ist der fast ganz ohne Papiere systemd-update-utmparbeitet Befehl intern in Bezug auf den Aktivierungszustände von rescue.target, multi-user.target, und graphical.target.
  • systemd-sysv-generator, der Abwärtskompatibilitäts-Service-Unit-Generator von systemd, führt die /etc/rc[234].dVerzeichnisse in nur einer Wanted-ByBeziehung zu den multi-user.targetgenerierten Service-Units zusammen. In den generierten Serviceeinheiten gibt es keinen tatsächlichen Verweis auf Laufebenen. (Früher gab es vor Jahren, aber die Systemleute stellten fest, dass dies schief ging, weil sie nirgendwo anders referenziert wurden.)

Wenn man ein Benutzer eines Systems ist, das systemd wie Arch Linux für den Fragesteller unter " Warum führt" init 0 "zu" Excess Arguments "bei der Arch-Installation? " Erstellt , erhält man nicht einmal die Kompatibilitäts-Shims und Befehle wie z als init 0Ergebnis das "native" systemd-Verhalten, bei dem zu beanstanden ist, dass der Befehl falsch aufgerufen wurde.

Weitere Lektüre

JdeBP
quelle
3

Vielen Dank. Also, wenn ich richtig verstanden habe:

Beispielsweise:

ls -ll /usr/lib/systemd/system/runlevel*.target

Ausgabe:

/usr/lib/systemd/system/runlevel0.target -> poweroff.target
/usr/lib/systemd/system/runlevel1.target -> rescue.target
/usr/lib/systemd/system/runlevel2.target -> multi-user.target
/usr/lib/systemd/system/runlevel3.target -> multi-user.target
/usr/lib/systemd/system/runlevel4.target -> multi-user.target
/usr/lib/systemd/system/runlevel5.target -> graphical.target
/usr/lib/systemd/system/runlevel6.target -> reboot.target

Wie Sie sehen, gibt es das Konzept der Runlevels, es ist jedoch ziemlich veraltet, da die runlevel.target-Dateien keine „echten“ Dateien sind, sondern Verknüpfungen zu dem neuen, modernen, besser benannten Dateischema, das systemd nennt sie gerne "Ziele".

Wenn Sie also etwas tun möchten, das Ihnen gefällt, dann ist telinit 5es so: systemctl isolate runlevel5.target was identisch ist mit: systemctl isolate graphical.target(meiner Meinung nach empfohlen).

Nur für den Fall, dass Sie interessiert sind, alle möglichen Ziele zu kennen:

ls /usr/lib/systemd/system/*.target
Drpaneas
quelle
Ja, ich glaube, dass Sie das richtig verstehen. Ich werde ein später Anwender von SystemD sein, da das prozedurale, schrittweise INIT.D-System das ist, mit dem ich am vertrautesten bin ... Ich begrüße, dass Sie SystemD untersuchen. Das Beste an SystemD ist das parallele Multithreading, das einen schnelleren Start ermöglicht. Der Multithreading-Start kann mit INIT.D durchgeführt werden, erfordert jedoch starkes BASH-Scripting.
Tyler Maginnis
Übrigens ls -llist gleichbedeutend mit ls -l. Vielleicht möchten Sie es sich zur Gewohnheit machen, etwas zu benutzen ls -ld.
G-Man sagt, dass Monica
telinit 0/ telinit 6Immer noch funktionieren. Da dies bei der Migration hilft und ich denke, dass die meisten Distributionen noch keinen Grund sehen, den Support einzustellen. isolateklar angestrebt, nachzuahmen, wie Run-Levels funktionieren, aber es gibt verschiedene böse Randfälle. Ich kann nur empfehlen, alle Anweisungen zu ignorieren isolate runlevel5.targetoder gar isolate graphical.target. Beispiel für einen Edge-Fall: github.com/systemd/systemd/issues/6505
sourcejedi
0

systemd führte Ziele als Gegenstück für Runlevel im sysV init-System ein. sytemd-Entwickler haben es fast kompatibel mit den meisten sysV-Skripten gemacht. Gleiches gilt für telinit <runlevel>. Dies wird in ein systemd-Äquivalent übersetzt.

Zum Beispiel telinit 0schaltet die Maschine aus. systemd hat poweroff.target , um dasselbe wie runlevel 0 zu machen . So telinit 0wird von systemd zu activate übersetzt poweroff.target .

Es gibt jedoch einige Kompatibilitätsprobleme mit sytemd- und sysV init-Systemen -> https://www.freedesktop.org/wiki/Software/systemd/Incompatibilities .

Prinz
quelle