Ich habe eine Reihe von Skripten, mit denen ich neue stabile Debian-Systeme installieren und konfigurieren konnte. Um Programme automatisch zu starten verwende ich /etc/rc.local
aber für andere Fälle musste ich die /etc/inittab
manuell ändern Datei. Ich habe auch andere Änderungen wie das Hinzufügen von --noclear
in die Zeile 1:2345:respawn:/sbin/getty --noclear 38400 tty1
.
Da ich den Herunterfahrvorgang anpassen musste, habe ich Folgendes getan:
l0:0:wait:/etc/rc.halt 0
...
l6:6:wait:/etc/rc.halt 6
und meine /etc/rc.halt
sieht so aus
#!/bin/sh
#
# rc.halt
#
# This script is executed when entering level 6/0 (on halt or reboot)
su - teststand -c "/home/teststand/stop_server.sh" # my custom command
# making sure the halt/reboot process is resumed
test -n "${1}" && /etc/init.d/rc ${1}
exit 0
Heute habe ich zum ersten Mal ein neues Debian 8 mit systemd
installiert als Standard-Init-System. Daran habe ich nicht gedacht und war zuerst überrascht, dass die Datei /etc/inittab
Datei fehlte.
Auf meinen laufenden Systemen (@work &@home) betreibe ich meine Systeme immer noch mit sysvinit
und deshalb habe ich 0 Erfahrung mit systemd
.
Ich weiß, dass ich zur alten sysvinit
wechseln kann aber ich möchte die Unterschiede mit systemd
sehen . Außerdem passe ich gerade eine neue Installation an und habe nicht allzu viel Zeit, um sie fertigzustellen, deshalb habe ich gerade keine Zeit, mir die Dokumentation anzusehen.
Meine Frage:Gibt es eine Möglichkeit, systemd
schnell zu ändern Verhalten, damit ich --noclear
hinzufügen kann zu getty
und mit /etc/rc.halt
als Ausgangspunkt für Neustart/Anhalten?
Grundsätzlich kann ich meine alte inittab
schnell importieren ändert sich in systemd
?
Danke
Akzeptierte Antwort:
systemd ist nicht abwärtskompatibel mit System 5 init
, nur System 5 rc
.
Die Systemverwaltung im Stil von Linux System 5 besteht aus zwei Teilen, init
der als Prozess #1 und rc
läuft das für die Ausführung von Start- und Stoppskripten zuständig ist. Diese stammen eigentlich aus zwei unterschiedlichen Paketen in Debian. init
stammt aus dem sysvinit-Paket; und rc
stammt normalerweise aus dem sysv-rc-Paket, könnte aber auch aus dem file-rc- oder dem openrc-Paket stammen.
/etc/inittab
ist eine Konfigurationsdatei, die von init
verarbeitet wird . systemd bietet dafür keinen Abwärtskompatibilitätsmechanismus. Der System 5-Abwärtskompatibilitätsmechanismus von systemd gilt nur für System 5 rc
, das die Programme in /etc/init.d/
ausführt . (Es ist nur für diese spezielle Variante von rc
, Außerdem. systemd implementiert keinen Abwärtskompatibilitätsmechanismus für die Konfigurationsmechanismen von file-rc und openrc.)
Dies ist nicht spezifisch für systemd. So ziemlich nein Ersatz-Init/System-Manager (mit nur einer Ausnahme in drei Jahrzehnten) verarbeitet /etc/inittab
.
Um einen Dienst in systemd einzubinden, müssen Sie die Mechanismen verwenden, die es macht Support, nämlich eine eigene Serviceeinheit Dateien und (über einen Generator, der automatisch in Unit-Dateien konvertiert) das System 5 rc
Konfigurationsdateien in /etc/init.d/
.
Vergessen Sie Runlevels.
All das Runlevel-Zeug, mit dem Sie arbeiten, wurde auf Systemd-Linux-Betriebssystemen für „veraltet“ erklärt. Gibt es nicht Führen Sie Level 0 oder 6 aus, um einzutreten. Sie existieren nicht ohne ein paar Kompatibilitäts-Shims.
Um einen Dienst beim Herunterfahren laufen zu lassen, besteht die offensichtliche Antwort, die von vielen gegeben wird, darin, eine Diensteinheit zu erstellen, die WantedBy
ist das shutdown.target
. Dies hat jedoch einige subtile Fallstricke. Eine bessere, aber weniger offensichtliche Antwort besteht darin, eine ansonsten normale Diensteinheit mit DefaultDependencies=yes
zu erstellen um sicherzustellen, dass es mit dem Shutdown-Ziel kollidiert, und legen Sie das Fleisch des Dienstes in ExecStop
statt in ExecStart
.
[Unit] Documentation=https://unix.stackexchange.com/questions/233561/ [Service] Type=oneshot User=teststand RemainAfterExit=true ExecStart=/bin/true ExecStop=/home/teststand/stop_server.sh [Install] WantedBy=multi-user.target
Rolle nicht deinen eigenen Dæmon Supervisor des armen Mannes in Shell-Skript.
Solche Sachen sind immer schlecht geschrieben.
Verwandt:Machen Sie tail -f exit auf einem kaputten Rohr?Wenn Ihr „Dienst“ einfach das Ausführen eines Befehls namens „stop_server.sh“ ist, dann ist die Schlussfolgerung, dass dies ein Skript ist, das einen Server unter einem handgerollten Shell-Skript-Dienstverwaltungssystem stoppt.
Es ist für diese schlecht geschriebenen, klapprigen, unzuverlässigen und gefährlichen Katastrophen:stop_server.sh
stop_server.sh
stop_server.sh
stop_server.sh
stop_server.sh
stop_server.sh
Sie haben systemd. Machen Sie davon Gebrauch und führen Sie jeden Dienst aus, der hier ausgeführt wird, indem Sie geeignete Dienstverwaltungsmechanismen verwenden. Sie werden diesen komischen ExecStop
nicht brauchen - Service überhaupt nur, wenn Sie Ihren aktuellen machen Dienst lauffähig über systemd mit DefaultDependencies=true
, da systemd das Herunterfahren des Dienstes übernimmt zum Zeitpunkt des Herunterfahrens.
Nehmen Sie einen Dæmon Supervisor eines armen Mannes in Shell-Skript, das einen Dienst „verwaltet“, und packen Sie das dann in eine systemd-Diensteinheit für einen zweiten Dienst, den man dann beim Herunterfahren startet, wenn das Ziel nicht mehr ist, als zu verwalten der erste Dienst und es herunterfahren zu lassen, wenn das System angehalten oder ausgeschaltet wird, ist ein guter Weg, um einen Eintrag im systemd House of Horror zu erhalten.
Die Welt möchte, dass Sie Ihren Bildschirm reinigen.
nicht wollen Ein virtuelles Terminal zwischen dem Abmelden und dem anschließenden Anmelden zu leeren, schwimmt sehr gegen den Strom, wie Greg Wooledge und andere herausgefunden haben. Das Vorhandensein vertraulicher Ausgaben von privilegierten Benutzern oder Vorgesetzten, die nach dem Abmelden zurückbleiben, ist seit den 1970er Jahren ein Sicherheitsproblem für Unices (und tatsächlich andere Timesharing-Betriebssysteme mit Fernzugriff), und es erfordert viel Mühe, alles rückgängig zu machen die Dinge, die Menschen unternommen haben, um dieses Problem abzuwenden.
- Viele Systeme haben eine
clear_console
standardmäßig in ihren Shell-Logout-Skripten. (Dies ist an sich schon problematisch, da es nicht gut mit grafischen Programmen funktioniert, die auf dem virtuellen Kernel-Terminal #1 laufen, und nicht mit anderen Arten von Terminals funktioniert, ob virtuell oder real.)Dieser Befehl muss entfernt werden.
- Die Standardeinstellung in getty-Programmen, die auf virtuelle Terminals abzielen, wie
mingetty
, soll das Terminal löschen. (Dies geschieht vor der Anmeldung, was bedeutet, dass die Terminalausgabe nicht gelöscht werden kann, wenn ein TTY-Anmeldedienst gestoppt wird. Ironischerweise wäre diese Funktionalität besser inlogin
platziert worden , das dank der Notwendigkeit von PAM beim Abmelden immer noch läuft.)Der
--noclear
Option muss bereitgestellt werden, um dies zu deaktivieren. Dies beinhaltet das Schreiben einer oder mehrerer Unit-File-Override-Dateien, das Ändern vonExecStart
Einstellung oder einfach auf[email protected]
zeigen in einer eigenen lokalen Einheitsdatei. - vom Systemd bereitgestellter
[email protected]
Template Service Unit setztTTYVTDisallocate=yes
was systemd anweist, ein virtuelles Kernel-Terminal zu löschen. (Dies funktioniert wiederum nicht mit anderen Arten von Terminals, nicht einmal mit virtuellen Terminals im Benutzerraum, wie sich teilweise in seinem Namen widerspiegelt.)Auch dies muss entfernt werden, wiederum mit einer Überschreibung oder einer anderen Dienstvorlage, auf die durch
[email protected]
verwiesen wird .
Weiterführende Literatur
- Jonathan de Boyne Pollard (2015).
/etc/inittab
gehört der Vergangenheit an. . Häufig gegebene Antworten. - https://unix.stackexchange.com/a/196014/5132
- Wie führe ich ein Skript direkt vor dem Herunterfahren mit systemd aus?
- Jonathan de Boyne Pollard (2014). Missbrauchen Sie
su
nicht für das Löschen von Benutzerprivilegien. . Häufig gegebene Antworten. - Greg Wooledge (08.04.2014). Hör auf, meine gottverdammte Konsole zu löschen . Gregs Wiki.
- Jonathan de Boyne Pollard (2015-08-22). System friert mit mehreren ttys in Debian Jessie ein . [E-Mail-geschützt] debian-user.
- https://unix.stackexchange.com/a/194218/5132
- Jonathan de Boyne Pollard (2015). Das systemd House of Horror . Häufig gegebene Antworten.