Ich habe im Web gesucht und herausgefunden, dass initctl vom Emporkömmling kommt.
Diesen Fehler erhalten Sie bei der Recherche durch die Suchmaschine und nicht auf der manuellen Seite.
Der Name ist eigentlich /run/initctl
. Upstart hat eine /sbin/initctl
. Die zwei sind völlig verschiedene Dinge. Ersteres ist ein FIFO, der verwendet wird, um Steuerbefehle an Prozess Nr. 1 zu senden. Letzteres ist eine Programmdatei.
Ursprünglich würde (Linux-Klon von) System V init
im Prozess Nr. 1 beim Booten einen FIFO-Namen erstellen /dev/initctl
. Programme, die beispielsweise telinit
durch Öffnen dieses FIFOs und Schreiben von Nachrichten, die der Prozess Nr. 1 lesen würde, ausgeführt werden, werden ausgeführt.
Systeme wie Upstart, Joachim Nilsson finit
und systemd stellen Kompatibilitäts-Shims bereit, die ein FIFO erstellen /dev/initctl
, auf Nachrichten warten und die Befehle von System V-Konzepten in die Äquivalente finit / Upstart / systemd übersetzen. Werkzeuge, die davon ausgehen, dass das System V- init
Programm ausgeführt wird, können diesen FIFO jedoch weiterhin öffnen und Befehle schreiben. (Nicht alle Init-Systeme stellen solche Shims zur Verfügung. Wenn Sie die Debian System V- init
Leute fragen, werden sie Ihnen sagen, dass dies eine schlecht dokumentierte interne API ist, die besagt, dass Programme, die nicht Teil des System V-Pakets sind, nicht wirklich sein sollten in erster Linie verwenden.)
Dann, vor ein paar Jahren, die Debian System V init
entschieden Menschen, dass der FIFO von bewegen würde /dev/initctl
zu /run/initctl
. So änderten sie ihre init
dort zu schaffen, und änderte alle Werkzeuge, die mit ihren kommen init
- wie shutdown
, halt
, telinit
und so weiter - es danach zu suchen.
Sie erzählten jedoch nur den Entwicklern eines der anderen Systeme. Wenn also keine System V- init
Systeme das System verwalten, bieten sie meistens noch ihre Kompatibilitäts-Shim-FIFOs an /dev/initctl
. Wenn Sie ein System V- init
Tool mit einem solchen Nicht-System V- init
System mischen, versucht das Tool, den FIFO an seinem neuen Speicherort zu öffnen, während das System es an dem alten Speicherort bereitstellt.
Die Problemumgehung sollte jetzt offensichtlich sein: Ein schneller symbolischer Link macht den Trick.
ln -s / dev / initctl / run / initctlUnd es dauert bis zum nächsten Neustart (wenn vermutlich einer das System in einer besseren Konfiguration neu gestartet hat, die init-Systeme nicht vermischt, und versucht, den FIFO selbst zu erstellen). Roger Leigh, einer der Betreuer des Debian System V-
init
Pakets, hat dies 2012 hervorgehoben. Beachten Sie, dass die Verwendung der System V- init
Tools nicht unbedingt erforderlich ist . Das Fehlen eines kompatiblen Shim-FIFOs auf vielen Init-Systemen ist keine große Sache. systemd, Upstart, nosh und andere Systeme alle neigen dazu, bieten ihre eigenen Versionen von Tools wie halt
, reboot
, telinit
und so weiter, sowieso . Diese Tools sprechen die nativen Protokolle ihrer jeweiligen Systeme und verwenden den initctl
FIFO überhaupt nicht. Die Shims von systemd sprechen die relevanten D-Bus-Protokolle an, um # 1 direkt zu verarbeiten. Die Shims von Upstart generieren direkt die relevanten Upstart-Ereignisse. Die Shims von nosh senden die relevanten Signale direkt an die Verarbeitung von # 1.
All das Fummeln in der anderen Antwort und den Kommentaren läuft auf zwei Punkte hinaus:
- Wenn Sie mit einem
/bin/bash
Prozess Nr. 1 anstelle eines tatsächlichen Init-Systems booten, wird es natürlichinitctl
nirgendwo ein FIFO geben. Wie bereits erwähnt, ist es das init-System, das es erstellt. Von neuem. Bei jedem Bootstrap. - Und es ist das Init-System, das darauf reagiert. Durch das manuelle Erstellen des FIFOs wird der Server, der am Leseende des FIFO auf Nachrichten
mkfifo
wartet, nicht auf magische Weise erstellt . Deshalb funktionieren die nachfolgenden Versuche der Hilfsprogramme, Nachrichten über den FIFO zu senden, nicht.
Wie Sie es geschafft haben, Debian 7 in einen Zustand zu bringen, in dem es die System V- init
Tools verwendet, aber zu diesem Zeitpunkt ein anderes init-System ausführt, ist ein anderer Fischkessel. Es ist durchaus möglich, dies zu tun, vor allem, wenn man sich gerade mit dem Wechseln von Init-Systemen befindet. Für Debian 7 war das wirklich nicht alles geregelt, und es gibt einige merkwürdige Zustände, in die ein System geraten kann. Es ist nicht alles glatt und auch in Debian 8 fertig. Zum Glück war das nicht deine Frage. ☺
Lesen Sie weiter
- Scott James Remnant und James Hunt.
initctl
(8) . Ubuntu-Handbuchseiten. - Robert Millan (August 2011). Bitte berücksichtige das Bewegen
/dev/initctl
zu/run
. 638019. Debian-Fehlerverfolgungssystem. - Joachim Nilsson README . end.
- systemd-initctl.service . freedesktop.org.
- Roger Leigh (Januar 2012). systemd: Bitte verwenden Sie / run / initctl, um die Kompatibilität mit sysvinit zu gewährleisten . 657979. Debian-Fehlerverfolgungssystem.
- Robert Millan (Januar 2012).
debian/patches/93_run_initctl.patch
. alioth.debian.org. halt
,poweroff
,reboot
. systemd-Handbuchseiten. freedesktop.org.- Scott James Remnant.
reboot
(8),halt
(8),poweroff
(8) . Ubuntu-Handbuchseiten.