Systemd ist eine Suite von grundlegenden Bausteinen für ein Linux-System. Es bietet einen System - und Service-Manager, der als PID 1 läuft und den Rest des Systems startet. Systemd bietet aggressive Parallelisierungsmöglichkeiten, nutzt Socket - und D-Bus-Aktivierung für Startdienste, bietet On-Demand-Start von Daemons, verfolgt Prozesse mit Linux-Kontrollgruppen. Pflegt Mount - und Automount-Punkte und implementiert eine aufwändige, transaktionsabhängige Dienststeuerungslogik. Systemd unterstützt SysV - und LSB-Init-Skripte und arbeitet als Ersatz für sysvinit. Andere Teile beinhalten einen Logging-Daemon, Dienstprogramme zur Steuerung der grundlegenden Systemkonfiguration wie Hostname, Datum, Gebietsschema, pflegen eine Liste der angemeldeten Benutzer und führen Container und virtuelle Maschinen, Systemkonten, Laufzeitverzeichnisse und Einstellungen und Dämonen, um einfaches Netzwerk zu verwalten Konfiguration, Netzwerkzeitsynchronisation, Protokollweiterleitung und Namensauflösung. Hinweis: Für eine ausführliche Erläuterung, warum Arch in systemd verschoben hat. Sehen Sie dieses Forum Post. Grundlegende systemische Nutzung Der Hauptbefehl, der introspect und control systemd verwendet wird, ist systemctl. Einige ihrer Verwendungen untersuchen den Systemzustand und die Verwaltung des Systems und der Dienste. Siehe man systemctl für weitere Details. Tipp: Sie können alle folgenden systemctl-Befehle mit dem - H Benutzer-Host-Switch verwenden, um eine systemd-Instanz auf einem Remote-Rechner zu steuern. Dies wird SSH verwenden, um eine Verbindung zu der entfernten Systeminstanz herzustellen. Systemadm ist das offizielle grafische Frontend für systemctl und wird vom systemd-ui Paket zur Verfügung gestellt. Plasma-Benutzer können systemd-kcm als grafische Fronted für systemctl installieren. Nach der Installation wird das Modul unter Systemverwaltung hinzugefügt. Analysieren des Systemstatus Systemstatus anzeigen mit: laufende Einheiten: Liste fehlgeschlagene Einheiten: Die verfügbaren Einheitsdateien können im usrlibsystemdsystem und etcsystemdsystem gesehen werden (letzteres hat Vorrang). Liste der installierten Einheitsdateien mit: Verwenden von Einheiten Einheiten können zB Dienste (.service), Mountpunkte (.mount), Geräte (.device) oder Sockets (.socket) sein. Bei der Verwendung von systemctl. Sie müssen in der Regel den vollständigen Namen der Einheitsdatei angeben, einschließlich des Suffixes, zB sshd. socket. Es gibt jedoch einige kurze Formulare bei der Angabe der Einheit in den folgenden systemctl-Befehlen: Wenn Sie das Suffix nicht angeben, übernimmt systemctl. service. Zum Beispiel sind netctl und netctl. service gleichwertig. Mount-Punkte werden automatisch in die entsprechende. mount-Einheit übersetzt. Zum Beispiel ist die Angabe von Haus gleichbedeutend mit home. mount. Ähnlich wie bei den Mount-Punkten werden die Geräte automatisch in die entsprechende Geräteeinheit übersetzt, weshalb devsda2 dem dev-sda2.device entspricht. Siehe man systemd. unit für Details. Hinweis: Einige Unit-Namen enthalten ein Vorzeichen (z. B. name string. service): Dies bedeutet, dass es sich um Instanzen einer Vorlageneinheit handelt, deren aktueller Dateiname nicht den String-Teil enthält (z. B. name. service). String wird als Instanzkennung bezeichnet. Und ähnelt einem Argument, das an die Vorlageneinheit übergeben wird, wenn es mit dem Befehl systemctl aufgerufen wird: In der Einheitsdatei wird es den i-Spezifizierer ersetzen. Um genauer zu sein, bevor man versucht, die name. suffix-Vorlageneinheit zu instanziieren, sucht systemd tatsächlich eine Einheit mit dem genauen Namestring. suffix-Dateinamen aus, obwohl durch Konvention ein solcher Zusammenstoß selten passiert, dh die meisten Unit-Dateien, die ein Schild enthalten, sind gemeint Vorlagen sein. Auch wenn eine Vorlageneinheit ohne Instanzkennung aufgerufen wird, wird es einfach fehlschlagen, da der i-Spezifizierer nicht ersetzt werden kann. Tipp: Die meisten der folgenden Befehle funktionieren auch, wenn mehrere Einheiten angegeben sind, siehe man systemctl für weitere Informationen. Der - Schalter kann in Verbindung mit Freigabe verwendet werden. Deaktivieren Und die Maske zu starten, zu stoppen oder zu maskieren sofort die Einheit anstatt nach dem nächsten Boot. Ein Paket kann Einheiten für verschiedene Zwecke anbieten. Wenn Sie gerade ein Paket installiert haben, kann pacman - Qql Paket grep - Fe. service - e. socket verwendet werden, um sie zu überprüfen und zu finden. Starten Sie sofort ein Gerät: Stoppen Sie sofort ein Gerät: Fragen Sie eine Einheit, um die Konfiguration neu zu laden: Zeigen Sie den Status eines Gerätes an, auch wenn es läuft oder nicht: Überprüfen Sie, ob ein Gerät bereits aktiviert ist oder nicht: Aktivieren Sie ein Gerät, das gestartet werden soll Hochfahren . Deaktivieren Sie eine Einheit, um während des Startvorgangs nicht zu starten: Maskieren Sie eine Einheit, um es unmöglich zu starten: Zeigen Sie die manuelle Seite an, die mit einer Einheit verbunden ist (dies muss von der Einheitsdatei unterstützt werden): System neu laden. Scannen nach neuen oder geänderten Einheiten. Power Management Polkit ist notwendig für Power Management als unprivilegierter Benutzer. Wenn Sie sich in einer lokalen Systemd-Logind-Benutzersitzung befinden und keine andere Sitzung aktiv ist, werden die folgenden Befehle ohne Root-Berechtigungen funktionieren. Wenn nicht (z. B. weil ein anderer Benutzer in einem tty angemeldet ist), wird systemd automatisch Sie nach dem Root-Passwort fragen. Fahren Sie das System herunter und starten Sie es neu: Schalten Sie das System aus und schalten Sie es aus: Das System aussetzen: Setzen Sie das System in den Ruhezustand: Legen Sie das System in den Hybrid-Schlaf-Zustand (oder Suspend-to-Both): Schreiben von Einheiten-Dateien Die Syntax von systemd S Unit-Dateien ist inspiriert von XDG Desktop Entry Specification. Desktop-Dateien, die wiederum von Microsoft Windows. ini-Dateien inspiriert sind. Unit-Dateien werden von zwei Standorten geladen. Von der niedrigsten zur höchsten Priorität sind sie: usrlibsystemdsystem. Einheiten von installierten Paketen etcsystemdsystem zur Verfügung gestellt. Einheiten, die vom Systemadministrator installiert werden Hinweis: Die Lastpfade sind bei der Ausführung im Systemmodus völlig anders. Systemnummern dürfen nur ASCII-alphanumerische Zeichen, Unterstriche und Perioden enthalten. Alle anderen Zeichen müssen durch C-style x2d Escapes ersetzt werden. Siehe man systemd. unit und man systemd-escape für weitere informationen. Schauen Sie sich die Einheiten an, die von Ihren Paketen für Beispiele installiert wurden, sowie den kommentierten Beispielabschnitt von man systemd. service. Tipp: Die mitgelieferten Kommentare können auch in Unit-Dateien verwendet werden, aber nur in neuen Zeilen. Verwenden Sie keine endgültigen Kommentare nach Systemparametern oder das Gerät wird nicht aktiviert. Behandlungsabhängigkeiten mit systemd. Abhängigkeiten können durch die korrekte Gestaltung der Geräte-Dateien behoben werden. Der typischste Fall ist, dass die Einheit A die Einheit B benötigt, um zu laufen, bevor A gestartet wird. In diesem Fall fügen Sie Benötigt B und Nach B zu der Einheit Abschnitt von A. Wenn die Abhängigkeit optional ist, füge bitte B und B an B an. Beachten Sie, dass Wants and Requires nicht implizieren After. Bedeutet, dass, wenn After nicht angegeben ist, die beiden Einheiten parallel gestartet werden. Abhängigkeiten sind in der Regel auf Dienstleistungen und nicht auf Ziele gesetzt. Zum Beispiel wird network. target von jedem beliebigen Service gezogen, um Ihre Netzwerkschnittstellen zu konfigurieren und damit Ihre benutzerdefinierte Einheit zu bestellen, nachdem es ausreichend ist, da network. target sowieso gestartet wird. Service-Typen Beim Schreiben einer benutzerdefinierten Servicedatei gibt es verschiedene Start-up-Typen. Diese Einstellung wird mit dem Typ-Parameter im Service-Bereich gesetzt: Typesimple (default): systemd berücksichtigt den Service, der sofort gestartet werden soll. Der Prozess darf nicht gabeln. Verwenden Sie diesen Typ nicht, wenn andere Dienste auf diesem Service bestellt werden müssen, es sei denn, es ist eine Steckdose aktiviert. Artforking Systemd berücksichtigt, dass der Dienst gestartet wurde, sobald die Prozessgabeln und der Elternteil verlassen haben. Für klassische Dämonen verwenden diese Art, wenn Sie nicht wissen, dass es nicht notwendig ist. Sie sollten auch PIDFile angeben, so dass systemd den Hauptprozess verfolgen kann. Typeoneshot. Dies ist nützlich für Skripte, die einen einzelnen Job machen und dann beenden. Vielleicht möchten Sie auch RemainAfterExityes setzen, so dass systemd den Service nach dem Beenden des Prozesses noch als aktiv betrachtet. Tintenotifizieren Identisch mit typisimple. Aber mit der Voraussetzung, dass der Dämon ein Signal senden wird, wenn es fertig ist. Die Referenzimplementierung für diese Meldung erfolgt durch libsystemd-daemon. so. Typedbus Der Dienst gilt als bereit, wenn der angegebene Busname auf dem DBuss-Systembus erscheint. Entleeren Systemd verzögert die Ausführung der Service-Binärdatei, bis alle Aufträge versendet werden. Anders als dieses Verhalten ist sehr ähnlich zu Typesimple. Zur ausführlichen Erläuterung der Typ-Werte siehe die Manpage systemd. service (5). Bearbeiten von bereitgestellten Einheiten Um Konflikte mit pacman zu vermeiden, sollten die von Paketen bereitgestellten Dateien nicht direkt bearbeitet werden. Es gibt zwei sichere Möglichkeiten, eine Einheit zu modifizieren, ohne die ursprüngliche Datei zu berühren: Erstellen Sie eine neue Einheitsdatei, die die ursprüngliche Einheit überschreibt oder erstellen Sie Drop-In-Snippets, die oben auf der ursprünglichen Einheit angewendet werden. Bei beiden Methoden müssen Sie das Gerät nachträglich neu laden, um Ihre Änderungen zu übernehmen. Dies kann entweder durch Bearbeiten des Gerätes mit systemctl edit (das lädt das Gerät automatisch) oder durch erneutes Laden aller Einheiten mit: Tipp: Sie können systemd-delta verwenden, um zu sehen, welche Unit-Dateien wurden überschrieben oder erweitert und was genau geändert wurde . Verwenden Sie systemctl cat unit, um den Inhalt einer Unit-Datei und alle zugehörigen Drop-In-Snippets anzuzeigen. Die Syntax-Hervorhebung für Systemdatendateien innerhalb von Vim kann durch die Installation von vim-systemd aktiviert werden. Ersatzeinheitsdateien Um die Einheitsdatei usrlibsystemdsystem zu ersetzen. Erstellen Sie die Datei etcsystemdsystem Einheit und reenable das Gerät, um die Symlinks zu aktualisieren: Dies öffnet etcsystemdsystem Einheit in Ihrem Editor (Kopieren der installierten Version, wenn es noch nicht existiert) und automatisch lädt es, wenn Sie die Bearbeitung beenden. Hinweis: Pacman aktualisiert die Ersatzeinheitsdateien nicht, wenn die Originale aktualisiert werden, so dass diese Methode die Systemwartung schwieriger machen kann. Aus diesem Grund wird der nächste Ansatz empfohlen. Drop-In-Dateien So erstellen Sie Drop-In-Dateien für die Unit-Datei usrlibsystemdsystem ein. Erstellen Sie das Verzeichnis etcsystemdsystem unit. d und platzieren Sie. conf-Dateien dort, um zu überschreiben oder neue Optionen hinzuzufügen. Systemd wird diese. conf-Dateien analysieren und sie auf die ursprüngliche Einheit anwenden. Der einfachste Weg, dies zu tun ist zu laufen: Dies öffnet die Datei etcsystemdsystem Einheit. doverride. conf in Ihrem Texteditor (erstellen Sie es, wenn nötig) und automatisch lädt das Gerät, wenn Sie fertig bearbeiten. Zur vendor-Version zurückkehren Um alle Änderungen an einem Gerät zurückzusetzen, das mit systemctl edit gemacht wird, tun Sie: Wenn Sie beispielsweise einfach eine zusätzliche Abhängigkeit zu einer Einheit hinzufügen möchten, können Sie folgende Datei erstellen: Als weiteres Beispiel, um den ExecStart zu ersetzen Richtlinie für eine Einheit, die nicht vom Typ oneshot ist. Erstellen Sie die folgende Datei: Beachten Sie, wie ExecStart gelöscht werden muss, bevor Sie neu zugewiesen werden 1. Dasselbe gilt für jedes Element, das mehrfach angegeben werden kann, z. B. OnCalendar für Timer. Ein weiteres Beispiel für den automatischen Neustart eines Dienstes: Grund: Unklar Beschreibung, Kopiengefüllter Inhalt (explizit erwähnt Fedora). (Diskussion in Talk: SystemdMake Abschnitt Ziele klarer) systemd verwendet Ziele, die einen ähnlichen Zweck wie Runlevels dienen, aber ein wenig anders wirken. Jedes Ziel wird anstelle von nummeriert benannt und soll einem bestimmten Zweck dienen, wobei die Möglichkeit besteht, dass mehrere gleichzeitig aktiv sind. Einige Ziele werden implementiert, indem sie alle Dienste eines anderen Ziels erben und zusätzliche Dienste hinzufügen. Es gibt Systemdargets, die die üblichen SystemVinit-Runlevels nachahmen, so dass Sie das Ziel mit dem vertrauten telinit RUNLEVEL-Befehl immer noch umschalten können. Aktuelle Ziele erhalten Nachfolgend sollte unter systemd statt Runlevel verwendet werden. Erstellen eines benutzerdefinierten Ziels Die Runlevels, die unter Sysvinit eine definierte Bedeutung hatten (d. h. 0, 1, 3, 5 und 6), haben eine 1: 1-Abbildung mit einem bestimmten Systemziel. Leider gibt es keinen guten Weg, um das gleiche für die benutzerdefinierten Runlevels wie 2 und 4 zu tun. Wenn Sie von denen Gebrauch machen, wird vorgeschlagen, dass Sie ein neues benanntes systemd Ziel als etcsystemdsystem Ihr Ziel machen, das einen der vorhandenen Runlevels nimmt Als eine Basis (Sie können auf usrlibsystemdsystemgraphical. target als Beispiel betrachten), machen Sie ein Verzeichnis etcsystemdsystem Ihr Ziel. wants. Und dann symlink die zusätzlichen Dienste von usrlibsystemdsystem, die Sie aktivieren möchten. Zieltabelle aktuelles Ziel ändern In Systemd-Targets werden über Zieleinheiten belichtet. Sie können sie so ändern: Dies ändert nur das aktuelle Ziel und hat keine Auswirkung auf den nächsten Start. Dies entspricht den Befehlen wie telinit 3 oder telinit 5 in Sysvinit. Ändern des Standardziels zum Booten in das Standardziel ist default. target. Die standardmäßig auf graphical. target vergeben wird (was etwa dem alten Runlevel 5 entspricht). Um das Standardziel beim Booten zu ändern, füge einen der folgenden Kernelparameter an deinen Bootloader an: systemd. unitmulti-user. target (was in etwa dem alten Runlevel 3 entspricht), systemd. unitrescue. target (was in etwa dem entspricht Alter Runlevel 1). Alternativ können Sie den Bootloader alleine verlassen und standard. target ändern. Dies kann mit systemctl erfolgen. Um das zuvor eingestellte default. target überschreiben zu können. Verwenden Sie die Kraft-Option: Die Wirkung dieses Befehls wird ausgegeben von systemctl ein Symlink auf das neue Standard-Ziel wird bei etcsystemdsystemdefault. target gemacht. Temporäre Dateien systemd-tmpfiles erstellt, löscht und reinigt flüchtige und temporäre Dateien und Verzeichnisse. Es liest Konfigurationsdateien in etctmpfiles. d und usrlibtmpfiles. d, um herauszufinden, welche Aktionen ausgeführt werden sollen. Konfigurationsdateien im früheren Verzeichnis haben Vorrang vor denen im letzteren Verzeichnis. Konfigurationsdateien werden in der Regel zusammen mit Service-Dateien bereitgestellt, und sie werden im Stil von usrlibtmpfiles. d Programm. conf benannt. Zum Beispiel erwartet der Samba-Daemon das Verzeichnis runsamba zu existieren und die richtigen Berechtigungen zu haben. Daher wird das Samba-Paket mit dieser Konfiguration ausgeliefert: Konfigurationsdateien können auch verwendet werden, um Werte in bestimmte Dateien beim Booten zu schreiben. Zum Beispiel, wenn Sie etcrc. local verwendet, um das Aufwecken von USB-Geräten mit Echo USBE gt procacpiwakeup zu deaktivieren. Sie können stattdessen die folgenden tmpfile verwenden: Siehe die Systemd-tmpfiles (8) und tmpfiles. d (5) man Seiten für Details. Hinweis: Diese Methode funktioniert möglicherweise nicht, um Optionen in sys einzustellen, da der systemd-tmpfiles-Setup-Dienst ausgeführt werden kann, bevor die entsprechenden Gerätemodule geladen werden. In diesem Fall können Sie überprüfen, ob das Modul einen Parameter für die Option hat, die Sie mit modinfo-Modul setzen möchten, und legen Sie diese Option mit einer Konfigurationsdatei in etcmodprobe. d fest. Andernfalls müssen Sie eine udev-Regel schreiben, um das entsprechende Attribut zu setzen, sobald das Gerät erscheint. Ein Timer ist eine Unit-Konfigurationsdatei, deren Name mit. timer endet und kodiert Informationen über einen Timer, der von systemd kontrolliert und überwacht wird. Zur zeitgesteuerten Aktivierung. Siehe systemdTimers. Da systemd ein Ersatz für System V init ist, ist es zuständig für die in etcfstab angegebenen Halterungen. In der Tat geht es über die üblichen fstab-Fähigkeiten hinaus und implementiert spezielle Mount-Optionen, die mit x-systemd vorangestellt sind. Siehe FstabAutomount mit Systemd für ein Beispiel der Automounting (Montage on-Demand) mit diesen Erweiterungen. Siehe 2 für die vollständige Dokumentation dieser Erweiterungen. Systemd hat ein eigenes Logging-System namens Journal, daher ist ein Syslog-Daemon nicht mehr erforderlich. Um das Protokoll zu lesen, verwenden Sie: In Arch Linux ist das Verzeichnis varlogjournal ein Teil des systemd-Pakets und das Journal (wenn Speicher auf auto in etcsystemdjournald. conf gesetzt ist) wird an varlogjournal schreiben. Wenn Sie oder ein Programm dieses Verzeichnis löschen, wird systemd es nicht automatisch neu erstellen und stattdessen seine Protokolle auf runsystemdjournal auf eine nicht-persistente Weise schreiben. Allerdings wird der Ordner neu erstellt, wenn Sie Storagepersistent setzen und systemctl neu starten systemd-journald (oder reboot). Systemd Journal klassifiziert Nachrichten nach Prioritätsstufe und Facility. Die Protokollierung entspricht dem klassischen Syslog-Protokoll (RFC 5424). Prioritätsstufe Ein Syslog-Schweregrad (in systemd genannt Priorität) wird verwendet, um die Bedeutung einer Nachricht zu markieren RFC 5424 Abschnitt 6.2.1. Also, nützliche Einrichtungen zu sehen: 0,1,3,4,9,10,15. Filterausgang journalctl ermöglicht es Ihnen, die Ausgabe nach bestimmten Feldern zu filtern. Seien Sie sich bewusst, dass, wenn es viele Meldungen zu zeigen oder zu filtern von großen Zeitspanne getan werden muss, die Ausgabe dieses Befehls kann für einige Zeit verzögert werden. Tipp: Während das Journal im Binärformat gespeichert ist, wird der Inhalt der gespeicherten Nachrichten nicht geändert. Dies bedeutet, dass es mit Saiten sichtbar ist. Zum Beispiel für die Wiederherstellung in einer Umgebung, die nicht installiert hat. Beispielbefehl: Alle Meldungen aus diesem Boot anzeigen: Allerdings interessiert man sich oft für Nachrichten, die nicht aus dem aktuellen, sondern aus dem vorherigen Boot stammen (z. B. wenn ein nicht behebbarer Systemabsturz stattgefunden hat). Dies ist möglich durch optionale Offset-Parameter des - b-Flags: journalctl - b -0 zeigt Meldungen aus dem aktuellen Boot, journalctl - b -1 aus dem vorherigen Boot, journalctl - b -2 ab dem zweiten vorherigen und so weiter. Siehe man 1 journalctl für ausführliche Beschreibung, die Semantik ist viel mächtiger. Zeige alle Nachrichten vom Datum (und der optionalen Zeit): Zeige alle Nachrichten seit 20 Minuten: Neue Nachrichten anzeigen: Alle Nachrichten von einer bestimmten ausführbaren Datei anzeigen: Alle Nachrichten nach einem bestimmten Prozess anzeigen: Alle Nachrichten einer bestimmten Einheit anzeigen: Kernelring anzeigen Puffer: Nur Fehler-, Kritik - und Alarm-Prioritätsmeldungen anzeigen Zahlen können auch verwendet werden, journalctl - p 3..1. Wenn ein einziges Ziffernwort verwendet wurde, war auch journalctl - p 3 - alle höheren Prioritätsstufen enthalten. Zeigen Sie auth. log-Äquivalent durch Filtern auf syslog-Einrichtung: Siehe man 1 journalctl. Mann 7 systemd. journal-Felder. Oder Lennarts Blog-Post für Details. Tipp: Standardmäßig schneidet journalctl Zeilen länger als die Bildschirmbreite, aber in manchen Fällen kann es besser sein, das Wrapping anstelle der Trunkierung zu aktivieren. Dies kann durch die Umgebungsvariable SYSTEMDLESS gesteuert werden. Die Optionen enthält, die an weniger (der Standard-Pager) übergeben werden und standardmäßig auf FRSXMK (siehe man 1 weniger und man 1 journalctl für Details). Durch das Weglassen der S-Option wird die Ausgabe anstatt abgeschnitten. Zum Beispiel starten Sie journalctl wie folgt: Wenn Sie dieses Verhalten als Standard setzen möchten, exportieren Sie die Variable aus Journal Größe Limit Wenn das Journal persistent (nicht-flüchtig) ist, ist seine Größenbeschränkung auf einen Standardwert von 10 der Größe des zugrunde liegenden Dateisystems, aber mit 4 GiB verschlossen. Zum Beispiel, mit varlogjournal auf einer 20 GiB-Partition, können Journal-Daten bis zu 2 GiB nehmen. Auf einer 50-GiB-Trennwand wäre es bei 4 GiB max. Die maximale Größe des persistenten Journals kann durch Unkommentieren und Ändern der folgenden gesteuert werden: Es ist auch möglich, den Drop-In-Snippets-Konfigurations-Override-Mechanismus zu verwenden, anstatt die globale Konfigurationsdatei zu bearbeiten. In diesem Fall vergessen Sie nicht, die Overrides unter den Journal-Header zu platzieren: Siehe man journald. conf für mehr Info. Saubere Journaldateien manuell Journaldateien können global aus dem varlogjournal entfernt werden, z. B. Rm Oder kann nach verschiedenen Kriterien mit journalctl getrimmt werden. Beispiele: archivierte Journaldateien entfernen, bis der Speicherplatz, den sie verwenden, unter 100M fällt: Alle Journaldateien enthalten keine Daten, die älter als 2 Wochen sind. Sehen Sie man journalctl für mehr Info. Journald in Verbindung mit syslog Kompatibilität mit einer klassischen, nicht-journald bewussten Syslog-Implementierung kann bereitgestellt werden, indem wir alle Nachrichten über den Socket Runsystemdjournalsyslog weiterleiten lassen. Um den Syslog-Daemon mit dem Journal zu arbeiten, muss er an diesen Socket anstelle von devlog (offizielle Ankündigung) binden. Die Standard-journald. conf für die Weiterleitung an den Socket ist ForwardToSyslogno, um System-Overhead zu vermeiden, da rsyslog oder syslog-ng die Nachrichten aus dem Journal selbst ziehen. Vorwärts journald to devtty12 Erstellen Sie ein Drop-In-Verzeichnis etcsystemdjournald. conf. d und erstellen Sie eine Datei fw-tty12.conf in es: Geben Sie ein anderes Journal zu sehen Es kann eine Notwendigkeit, die Protokolle eines anderen Systems, das tot ist in der Wasser, wie das Booten von einem Live-System, um ein Produktionssystem zu erholen. In einem solchen Fall kann man die Platte in z. B. Mnt. Und spezifizieren Sie den Journalpfad über - D - Verzeichnis. So wie: Tipps und Tricks Aktivieren Sie installierte Einheiten standardmäßig Grund: Wie funktioniert es mit instanziierten Einheiten (Diskussion in Talk: Systemd) Arch Linux wird mit usrlibsystemdsystem-preset99-default. preset mit disable erstellt. Dies führt dazu, dass systemctl Preset alle Einheiten standardmäßig deaktiviert, so dass bei der Installation eines neuen Pakets der Benutzer das Gerät manuell aktivieren muss. Wenn dieses Verhalten nicht erwünscht ist, erstellen Sie einfach einen Symlink von etcsystemdsystem-preset99-default. preset zu devnull, um die Konfigurationsdatei zu überschreiben. Dies führt dazu, dass systemctl-Voreinstellung alle Einheiten aktiviert, die unabhängig von der Einheit, die in einer anderen Datei in einem System-Preset-Konfigurationsverzeichnisse angegeben ist Benutzereinheiten sind nicht betroffen. Weitere Informationen finden Sie auf der Manpage für systemd. preset. Hinweis: Wenn Sie alle Einheiten standardmäßig aktivieren, können Probleme mit Paketen auftreten, die zwei oder mehrere sich gegenseitig ausschließende Einheiten enthalten. Systemctl preset ist so konzipiert, dass es von Distributionen und Spins oder Systemadministratoren verwendet wird. In dem Fall, in dem zwei gegensätzliche Einheiten aktiviert würden, sollten Sie explizit angeben, welche in einer voreingestellten Konfigurationsdatei deaktiviert werden soll, wie in der Manpage für systemd. preset angegeben. Sandboxing-Anwendungsumgebungen Eine Einheitsdatei kann als Sandbox erstellt werden, um Anwendungen und deren Prozesse in einer gehärteten virtuellen Umgebung zu isolieren. Systemd nutzt Namespaces. Weiß-Blacklisting von Fähigkeiten. Und Kontrollgruppen zu Containerprozessen durch eine umfangreiche Ausführungsumgebungskonfiguration. Die Erweiterung einer vorhandenen Systemdatendatei mit Applikationssandboxen erfordert typischerweise Test-und-Fehler-Tests, begleitet von der großzügigen Verwendung von Strace. Stderr und journalctl Fehlerprotokollierung und Ausgabeeinrichtungen. Möglicherweise möchten Sie zuerst die Upstream-Dokumentation für bereits durchgeführte Tests suchen, um die Testversuche zu erstellen. Einige Beispiele dafür, wie Sandboxing mit Systemd eingesetzt werden kann: CapabilityBoundingSet definiert einen Whitelist-Satz von erlaubten Fähigkeiten, kann aber auch verwendet werden, um eine bestimmte Fähigkeit für eine Einheit zu verknüpfen. Die CAPSYSADM-Fähigkeit, zum Beispiel, die eines der Ziele einer sicheren Sandbox sein sollte. CapabilityBoundingSet CAPSYSADM UnboundSandboxing zeigt ein umfangreiches Beispiel für Systemfunktionen für Sandboxen. Fehlerbehebung Untersuchung von Systemfehlern Als Beispiel werden wir einen Fehler mit systemd-modules-load service untersuchen: 1. Ermöglicht es uns, die Systemdienste zu finden, die nicht starten können: 2. Ok, wir haben ein Problem mit systemd-modules-load service gefunden. Wir wollen mehr wissen: Wenn die Prozess-ID nicht aufgeführt ist, starten Sie einfach den fehlgeschlagenen Dienst mit systemctl restart systemd-modules-load 3. Jetzt haben wir die Prozess-ID (PID), um diesen Fehler in der Tiefe zu untersuchen. Geben Sie den folgenden Befehl mit der aktuellen Prozess-ID ein (hier: 15630): 4. Wir sehen, dass einige der Kernel-Modul-Konfigurationen falsche Einstellungen haben. Deshalb schauen wir uns diese Einstellungen in etcmodules-load. d an. 5. Das fehlgeschlagen zu finden Modul Blacklist usblp Fehlermeldung könnte auf eine falsche Einstellung innerhalb von blacklist. conf bezogen werden. Lässt es mit dem Einfügen eines Nachlaufs vor jeder Option, die wir über Schritt 3: 6 gefunden haben, deaktivieren. Versuchen Sie nun, systemd-modules-load zu starten. Wenn es erfolgreich war, sollte das nichts veranlassen. Wenn Sie einen Fehler sehen, gehen Sie zurück zu Schritt 3 und verwenden Sie die neue PID für die Lösung der Fehler links. Wenn alles in Ordnung ist, können Sie sicherstellen, dass der Service erfolgreich gestartet wurde: Oft können Sie diese Art von Problemen wie oben gezeigt lösen. Für weitere Untersuchungen siehe Diagnose Bootprobleme. Die Diagnose von Bootproblemen hat mehrere Möglichkeiten, Probleme mit dem Bootvorgang zu diagnostizieren. Siehe Boot-Debugging und die systeme Debugging-Dokumentation. Diagnose von Problemen mit einem bestimmten Dienst Grund: Dies kann nicht fehlen alle Fehler wie fehlende Bibliotheken. (Diskutieren Sie im Benutzergespräch: AlucrydPlex) Wenn einige Systemdienste missbraucht werden und Sie mehr Informationen darüber erhalten möchten, was los ist, setzen Sie die Umgebungsvariable SYSTEMDLOGLEVEL auf Debugging. Zum Beispiel, um den systemd-networkd-Daemon im Debug-Modus auszuführen: Oder gleichbedeutend die Service-Datei vorübergehend ändern, um genügend Ausgabe zu sammeln. Zum Beispiel: Wenn Debug-Informationen langfristig benötigt werden, füge die Variable die reguläre Weise hinzu. Shutdownreboot dauert schrecklich lange Wenn der Shutdown-Prozess eine sehr lange Zeit dauert (oder zu frieren scheint), ist wahrscheinlich ein Service, der nicht aufhört. Systemd wartet einige Zeit für jeden Dienst zu beenden, bevor er versucht, es zu töten. Um herauszufinden, ob Sie betroffen sind, sehen Sie diesen Artikel. Kurze gelebte Prozesse scheinen keine Ausgabe zu protokollieren Wenn journalctl - u foounit keine Ausgabe für einen kurzlebigen Dienst zeigt, schauen Sie sich die PID an. Zum Beispiel, wenn systemd-modules-load. service fehlschlägt und systemctl status systemd-modules-load zeigt, dass es als PID 123 ausgeführt wurde, dann können Sie die Ausgabe im Journal für diese PID, d. h. journalctl - b PID61123 sehen. Metadatenfelder für das Journal wie SYSTEMDUNIT und COMM werden asynchron gesammelt und verlassen sich auf das Proc-Verzeichnis für den vorhandenen Prozess. Das Fixieren erfordert das Festlegen des Kernels, um diese Daten über eine Socket-Verbindung, ähnlich wie bei SCMCREDENTIALS, bereitzustellen. Boot-Zeit, die im Laufe der Zeit zunimmt Nach dem Systemd-Analysen hat eine Anzahl von Benutzern bemerkt, dass ihre Boot-Zeit im Vergleich zu dem, was es früher war, deutlich zugenommen hat. Nach der Verwendung von systemd-analyse schuld wird NetworkManager als ungewöhnlich viel Zeit zum Starten gemeldet. Das Problem für einige Benutzer war, weil varlogjournal zu groß wurde. Dies kann andere Auswirkungen auf die Leistung haben, wie zum Beispiel für den Systemstatus oder journalctl. Als solches ist die Lösung, um jede Datei innerhalb des Ordners zu entfernen (idealerweise eine Sicherung davon irgendwo, zumindest vorübergehend) und dann Einstellung einer Journale Dateigröße, wie in Journal Größe Limit beschrieben. Systemd-tmpfiles-setup. service startet beim Start nicht gestartet ab systemd 219 gibt usrlibtmpfiles. dsystemd. conf ACL-Attribute für Verzeichnisse unter varlogjournal an und benötigt daher die Aktivierung der ACL-Unterstützung für das Dateisystem, in dem sich das Journal befindet. Weitere Informationen zum Aktivieren von ACL im Dateisystem finden Sie unter Access Control ListsEnabling ACL. Systemctl enable fehlschlägt für symlinks in etcsystemdsystem Wenn etcsystemdsystem foo. service ist ein symlink und systemctl enable foo. Service wird ausgeführt, wird es mit diesem Fehler fehlschlagen: Dies ist eine Design-Wahl von systemd. Als Workaround, ermöglicht durch absolute Pfadarbeiten: abhängige Dienste werden nicht gestartet, wenn man einen Service manuell startet Ein (in) berühmtes Beispiel libvirtd. service, das die virtlogd. socket benötigt, um ordnungsgemäß zu funktionieren. Die Abhängigkeiten in usrlibsystemdsystemlibvirtd. service sind definiert als Dies definiert nur die notwendigen abhängigen Sockets, um Dienste zu aktivieren (d. h. als Autostart) auch - aber startet sie nicht, wenn der DISABLED (nicht autostarting) Service manuell gestartet wird, z. B. Durch das Ausführen von systemctl start libvirtd So ist die korrekte () Art und Weise manuell einen Service mit abhängigen Subservices einmal zu starten (anstatt bei jedem Start des Systems) wahrscheinlich ist die systemierte Version, die beim Booten gedruckt wird, nicht die gleiche wie die installierte Paketversion. Du musst dich regenerieren Initramfs und die Versionen sollten übereinstimmen. Tipp: Ein pacman-Haken kann verwendet werden, um die initramfs jedes Mal automatisch zu regenerieren, wenn systemd aktualisiert wird. Sehen Sie dieses Forum Thread und PacmanHooks. Systemd ist ein System-und Service-Manager für Linux, kompatibel mit SysV und LSB Init-Skripte. Systemd bietet aggressive Parallelisierungsmöglichkeiten, nutzt Sockel - und D-Bus-Aktivierung für Startdienste, bietet On-Demand-Start von Daemons an, verfolgt Prozesse mit Linux-Cgroups, unterstützt Snapshots und Wiederherstellung des Systemstatus, pflegt Mount - und Automotive-Punkte und implementiert ein Aufwändige transaktionsabhängige Dienstkontrolllogik. Es kann als Drop-in Ersatz für sysvinit arbeiten. Weitere Informationen finden Sie im Video unter youtubewatchvTyMLi8QF6sw Für Systemadministratoren Systemadministratoren können diese Seite besuchen. Um zu verstehen, wie man die nativen systemctl-Aufrufe benutzt, die ihren alten Workflow in SysVinit ersetzen. Beachten Sie, dass die Befehle service und chkconfig weiterhin in der systemd world funktionieren. Warum systemd systemd Dokumentation systemd hat sehr umfangreiche Dokumentation. Siehe Boot-Kernel-Befehlszeile On boot systemd aktiviert (standardmäßig) die Zieleinheit default. target, deren Job ist, Dienste und andere Einheiten zu aktivieren, indem sie sie über Abhängigkeiten ziehen. Um das Gerät zu aktivieren, um es zu aktivieren, analysiert systemd seine eigenen Kernel-Befehlszeilenargumente über die Befehlszeilenoption systemd. unit. Dies kann verwendet werden, um vorübergehend in eine andere Boot-Einheit zu booten. Die klassischen Run-Levels werden wie folgt ersetzt: systemd. unitrescue. target ist eine spezielle Zieleinheit für die Einrichtung des Basissystems und einer Rescue-Shell (ähnlich der Run Level 1) systemd. unitemergency. target. Ist sehr ähnlich zu übergeben initbinsh aber mit der Option, das volle System von dort aus zu starten systemd. unitmulti-user. target für die Einrichtung eines nicht grafischen Multi-User-System systemd. unitgraphical. target für die Einrichtung eines grafischen Login-Bildschirm. Für Details zu diesen speziellen System-Boot-Einheiten, sehen Sie die man systemd. special Seite. Es scripts Was ist das Werkzeug, um Dienste mit systemd systemctl zu verwalten ist das primäre Werkzeug zu verwenden. Es kombiniert die Funktionalität von service und chkconfig zu einem einzigen Tool, das Sie zB für aktivierbare Dienste dauerhaft oder nur für die aktuelle Session nutzen können. Liste aller laufenden Dienste usw.: Siehe man systemctl für weitere Details. Systemd-cgls listet den laufenden Prozess in einem Baumformat auf. Es kann rekursiv den Inhalt einer bestimmten Kontrollgruppe anzeigen. Weitere Informationen finden Sie unter man systemd-cgls. Wie kann ich einen Start starten oder aktiviert werden: Aktiviert sofort einen Dienst: Deaktiviert sofort einen Dienst: Neustart eines Dienstes: Zeigt den Status eines Dienstes an, egal ob er ausgeführt wird oder nicht: Ermöglicht den Start eines Dienstes beim Booten: Deaktiviert einen Dienst, der nicht gestartet werden soll Bootup: Verhindern, dass ein Dienst dynamisch oder sogar manuell gestartet wird, es sei denn, es wurde nicht entlastet: Überprüfen Sie, ob ein Dienst bereits aktiviert ist oder nicht: Weitere Informationen finden Sie unter man systemctl. Wie kann ich das Ziel ändern (runlevel) systemd hat das Konzept der Ziele, die ein flexiblerer Ersatz für Runlevels in sysvinit ist. Run Level 3 wird durch multi-user. targed emuliert. Run Level 5 wird durch graphical. targe emuliert. Runlevel3.target ist eine symbolische Verknüpfung zu multi-user. target und runlevel5.target ist eine symbolische Verknüpfung zu graphical. target. Sie können auf Runlevel 3 umschalten. Sie können zu Runlevel 5 wechseln, indem Sie ausführen. Wie ändere ich das Standardziel graphical. target ist die Voreinstellung. Vielleicht möchten Sie multi-user. target für das Äquivalent von nicht grafischen (Runlevel 3) von sysv init. Die vollständige Liste der Ziele kann über systemctl list-units abgerufen werden - typetarget systemd verwendet keine etcinittab-Datei. Wie kenne ich das aktuelle Ziel Wie man die Maschine ausschaltet Einige weitere Möglichkeiten sind: halt - p. Init 0. shutdown - P jetzt Beachten Sie, dass halt verwendet, um das gleiche wie Poweroff in früheren Fedora Releases arbeiten, aber systemd unterscheidet zwischen den beiden, so halt ohne Parameter jetzt genau das, was es sagt - es stoppt nur das System, ohne es auszuschalten. Does service command work with systemd Yes. It has been modified to call systemctl automatically when dealing with systemd service files. So either of the following commands does the same thing Does chkconfig command work with systemd Yes, for turning onoff services, compatibility has been provided both ways. chkconfig has been modified to call systemctl when dealing with systemd service files. Also systemctl automatically calls chkconfig when dealing with a traditional sysv init file. So either of the following commands does the same thing chkconfig --list doesnt list systemd services, only Sys V services. The output of chkconfig takes note of this, along with supplying additional information. Does system-config-services work with systemd How do I change the number of gettys running by default The simplest way is to edit etcsystemdlogind. conf (man page ): This setting will take effect after reboot. Alternatively, getty. services which open the login prompt can be enabled and started individually. To add another getty: To remove a getty: systemd does not use etcinittab file. How do I set automatic login on a virtual console terminal First create a new service similar to getty. service: then edit ExecStart, Restart and Alias values, like this: and finally reload daemon and start the service: Note that if you exit tty8 session, you wont be able to use it until next reboot or manual start by systemctl, except if you leave Restart as always, but I highly recommend to avoid this according to security reasons. How do I customize a unit file add a custom unit file The best way to customize unit files is to add etcsystemdsystemfoobar. service. d.conf where foobar. service is the name of the service you want to customize. If a directory doesnt already exist, create one and drop a conf file with the settings you want to override. For example, Refer to man systemd. unit page for more details. Dont forget to reload systemd daemon using systemctl daemon-reload and systemctl restart foobar after editing a unit file where foobar is the name of the unit. Also note that you can systemd-delta to list the unit files which have been customized and also the precise differences Special care must be taken when overriding options which can be set muliple times ( ExecStart. ExecStartPre. ExecStartPost are a common example). Assigning some value to the option appends to the existing list, while assiging the empty value resets the list. For example, lets say we have a service file like this: When started, this service will print The same rules apply to snippets in. d directories. This means that snippets which override ExecStart and similar settings, often should start with the empty assignment ExecStart. followed by the new setting. How do I debug systemd issues systemd comes with extensive documentation including several man pages. Referencessystemd - An alternative boot manager systemd is a system and session manager for Linux, compatible with SysV and LSB init scripts. systemd provides aggressive parallelization capabilities, uses socket and D-Bus activation for starting services, offers on-demand starting of daemons, keeps track of processes using Linux cgroups, supports snapshotting and restoring of the system state, maintains mount and automount points and implements an elaborate transactional dependency-based service control logic. See the systemd home page for further information. Warning Experimental code systemd is under active development in Ubuntu although the rough plan would be to default to systemd during development of 15.04. If you want to help its best to be running 15.04. (14.10 might be doable as well..) Installing systemd in Ubuntu may limit the amount of help and support available to you. If you have a commercial support agreement then installing systemd would almost certainly invalidate it. Even if you rely on forums etc, you will probably have to reproduce problems on a standard Ubuntu build before anyone can help you much. If you want to quickly try out systemd, it may be a good idea to create a sandpit system for the purpose (e. g. a virtual machine that you can easily re-install or delete afterwards). If you are installing systemd on a system containing data that you care about, please take a full backup first, and make a plan for restoring from backup in the event that the system ends up unbootable. Personal Package Archive location systemd and related packages are available on this PPA To use the PPA, first add it to your software sources list as follows. Installing systemd systemd can be installed from the PPA as follows. This results in systemd being installed alongside upstart. Boot loader configuration After installation, the machine will still boot under upstart by default. To boot under systemd, the following argument must be specified on the kernel command line: Note that the systemd binary resides now in libsystemd and binsystemd is just a symlink to it. To boot under systemd by default, edit etcdefaultgrub and change the following line: After modifying any grub related configuration files like etcdefaultgrub the following command is needed to bring the changes into effect. systemd prints the following warning on boot: It is advisable to do as suggested and replace etcmtab . It is not only mount that will behave incorrectly otherwise, but also df and probably most other commands that look at the list of mounted filesystems. This change can be made as follows. Using systemd To boot under systemd, select the boot menu entry that you created for the purpose. If you didnt bother to create one, just select the entry for your patched kernel, edit the kernel command line directly in grub and add initlibsystemdsystemd . If a normal boot under systemd is not successful then it is worth trying with the following parameters: systemd. unit specifies the target state that the system should boot to (similar to specifying a run level under sysvinit). emergency. service launches an emergency bash shell on the console without attempting to start any other services. Controlling systemd once booted The main command used to control systemd is systemctl . Some of its subcommands are as follows. systemctl list-units - List all units (where unit is the term for a jobservice) systemctl start NAME. - Start (activate) one or more units systemctl stop NAME. - Stop (deactivate) one or more units systemctl enable NAME. - Enable one or more unit files systemctl disable NAME. - Disable one or more unit files systemctl reboot - Shut down and reboot the system For the complete list, see systemctl(1). systemadm is the GUI equivalent to systemctl . if you like that sort of thing. Remote filesystem mounts If you have NFS mounts listed in etcfstab then systemd will attempt to mount them but will typically do so too early, before networking has been configured. To get the timing correct we need to tell systemd explicitly that the mount depends on networking and on rpc. statd . To do this, create a file under libsystemdsystem named ltmount-unit-namegt. mount with contents as follows. mount-unit-name is the full path to the mountpoint in an escaped format. For example, a mount unit for usrlocal must be named usr-local. mount . mountpoint is the local mountpoint server : share specify the remote filesystem in the same manner as for etcfstab See systemd. unit(5) and systemd. mount(5) for further details. A similar approach will probably be required for other remote filesystem types such as nfs4 and cifs Useful snippets To see which other units a service depends on: systemd quickstart for upstart users Implementation issues Packaging of units A unit properly belongs in the package of the daemon that it starts. systemd units are already included in some upstream packages and some Debian Experimental packages. They will probably appear in Ubuntu packages in due course, unless Ubuntu maintainers deliberately remove them. The systemd-extra-units package is intended only to make systemd usable in the short term by shipping some important units that dont yet exist in other Ubuntu packages. It should be scaled back as and when units start to appear in their proper places, and should eventually be dropped. Dependencies on things not yet available in Ubuntu Upstream systemd depends on recent upstream changes to several other packages that are not yet available in Ubuntu. These have been worked around by reverting the relevant changes in systemd or disabling the relevant feature. In brief these are: systemd 15 wants libnotify gt 0.7 and vala 0.11 Relevant changes have been reverted in order to build with libnotify 0.5.0 and vala 0.9. systemd wants sbinagetty but DebianUbuntu renames it to sbingetty sbinagetty will be added as a link in Debian wheezy (Debian bug 603786 ). systemd invokes agetty - s where the option - s was added by recent upstream commits in util-linux . Units getty. service and serial-getty. service have been patched to remove this option. systemd-fsck invokes fsck - l where the option - l was added by recent upstream commits in util-linux systemd-fsck has been patched to remove this option. Networking NetworkManager. service just starts NetworkManager and does not wait for it to bring up a network interface. This seems appropriate, but network. target should not become active until a network connection is up. An extra unit, wait-for-network. service . has been created to delay network. target . The appropriate way to wait for a network connection with NetworkManager appears to be nm-online . but this binary is not shipped in the Debian or Ubuntu packages for some reason. For systemd-extra-units 0.2 a simple shell loop has been used. This is effective, but hardly in the spirit of systemd. TODO: Ask whether nm-online could be shipped in the network-manager package, or re-implement something similar if not. NOTE: The network-manager package from Debian experimental does ship nm-online and will be uploaded to wheezy as soon as squeeze is released. Remote filesystem mounts systemd reads etcfstab and automatically creates a mount unit for each entry. The automatically generated dependencies for these units are insufficient in the case of remote filesystems. The correct dependencies can be specified explicitly in a mount unit configuration file (see above) but ideally this should be handled automatically. Proposal: When parsing an etcfstab entry, systemd should look for a unit template named after the filesystem type (e. g. nfs. mount for an NFS mount). If a template is found it should be used, with appropriate substitutions. Otherwise systemd should fall back to creating the mount unit with default settings as per the current behaviour. TODO: Write a patch for this and propose it upstream. The upstart job for portmap saves state using pmapdump and restores it using pmapset . The sysvinit script in Debian does the same thing. These actions appear redundant because portmap itself saves state to varrunportmapmapping after each change. My guess is that this is all based on instructions in the upstream source README, which may be out of date or just misleading. TODO: Confirm whether pmapdump pmapset really serve some purpose and include them in the systemd unit if so. etccron. danacron invokes anacron via the upstart job, which wont work while booted under systemd. A change to the anacron package would be needed to address this. etcdefault Existing sysvinit style scripts read configuration in the form of variable assignments from a file under etcdefault . A policy decision is needed on whether systemd units will do the same. Advantages: Separates configuration from code, simplifies package upgrade (i. e. same reasoning that applies to the existing sysvinit scripts). Disadvantages: Extra complexity. Some may argue that systemd units are simple enough to be treated entirely as configuration files. etcdefault files can be read using the EnvironmentFile parameter in a systemd service unit. However, this is not fully compatible with the shell. In particular the quoting rules differ. It is not possible to write an environment variable assignment containing whitespace or literal quotes in a way that both a legacy init script and systemd will understand. TODO: Decide whether systemd will use etcdefault files. Needs discussion with Debian maintainers. There would be little benefit in Ubuntu going its own way on this. TODO: Finish off patch for shell compatible quoting support and submit upstream. Other TODO Items Unit(s) for static network configuration without NetworkManager . Units for remaining native Upstart jobs in a default Ubuntu install that dont currently have systemd equivalents: apport cups log dmesg after boot failsafe X session irqbalance bring up virtual network devices Desktop integration for systemadm Plymouth integration Workarounds Failures on software-upgrades The post-installation script of packages uses sbinstart and sbinstop to start and stop (running) services in an upstart environment. Both binaries are symlinks to sbininitctl shipped with upstart package. Unfortunately, software-upgrades break when switching to systemd as an alternative init-system on Ubuntu systems, more precisely the software-management tool dpkg breaks. NOTE: Below workarounds were tested on Ubuntuprecise with a very early systemd v43 (so be careful). Bug 1008837 cups fails to installupgrade with systemd A little demo Workaround: Using an initctl replacement On IRC I discussed with Michael Biebl and others on the topic and Michael had concerns using bintrue as a symlink to sbinstart and sbinstop . In the end, the idea of an initctl replacement was born. Rename the original sbininitctl binary: Edit a new sbininitctl replacement file (Thanks mbiebl and grawity): Make the new script executable: Create and list a divert for the original initctl (this prevents e. g. its removal on upgrades): Remove the new divert in case you want to restore original behaviour: Software-upgrades touching startstop of daemons should now work fine within an upstart or systemd environment. systemd ( pitti 2015-01-22 09:56:01)
No comments:
Post a Comment