Verwirrt über "/etc/init.d" und Dienste in "/ lib / systemd / system"

15

Ich bin völlig neu in der Linux-Welt, deshalb entschuldige ich mich für alles, was ich falsch sagen könnte.

Ich versuche, eine Mongo-DB auf einem Debian 8.5-Rechner auszuführen. Bei der Installation des Pakets (vorab von percona.com erstellt) sind mir folgende Dateien aufgefallen:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

Über /etc/init.d/mongod

Ich verstehe, dass dies update-rc.dbeim Booten / in anderen bestimmten Systemzuständen aufgerufen wird (solange es über registriert ist ) (ich möchte keine technischen Informationen dazu erhalten, ich absorbiere viele Informationen und dies scheint weniger wichtig zu sein).

Das ist vollkommen in Ordnung für mich. Das Skript führt viele Initialisierungen durch und startet schließlich den Mongo-Daemon. Es scheint "Auslöser" für Start, Stopp, Neustart usw. zu haben, und soweit ich weiß, kann ich diese mit auslösen sudo service mongod <action>.

Über /lib/systemd/system/mongod.service

Diese Datei scheint dasselbe zu tun (dh mongo ausführen), aber mit weniger Konfiguration, nur eine Zeile im ExecStart-Parameter:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

Soweit ich weiß, kann dies mit ausgelöst werden sudo systemctl start mongod.

  • Ich verstehe nicht, ob dies beim Booten aufgerufen wird oder nicht.

  • Ich verstehe nicht, warum zwei dieser "Service" -Dateien benötigt werden und wie ich eine entfernen kann (möglicherweise die in / lib / systemd, da dies viel einfacher ist).

  • Ich verstehe nicht, ob es eine Beziehung zwischen den beiden gibt.

  • Ich habe gelesen, dass systemctldas auch mit init.dSkripten funktioniert , und in diesem Fall verstehe ich nicht, von welcher der beiden Dateien ausgelöst wird systemctl mongod start.

Ich denke, es gibt eine gewisse Redundanz und ich sollte nur einen der beiden Wege wählen. Und ich möchte sicher sein, dass es so ist

  • beim booten angerufen
  • aufrufbar per Befehl (wie serviceoder systemctl).

Könnten Sie mir helfen, meine Meinung zu klären? Mit Hilfe einiger Kommentare kann ich die Frage wahrscheinlich fokussieren und eingrenzen.

Natario
quelle

Antworten:

12

Wenn Sie sowohl ein init.dSkript als auch eine systemd- .serviceDatei mit demselben Namen haben, verwendet systemd die Servicedatei für alle Vorgänge. Ich glaube, der serviceBefehl wird nur auf systemd umleiten. Das init.d-Skript wird ignoriert.

Verwenden Sie systemd. Es ist neu in Debian 8, aber es ist die Standardeinstellung. Systemd-Servicedateien sollen einfacher aussehen als init.d-Skripte. Sie haben keine spezifischen Funktionen erwähnt, die vom systemd-Dienst nicht unterstützt werden.

Wenn die Servicedatei nicht enthalten systemdwäre , würde ich gerne das init.d-Skript verwenden. Der mongod-Paketentwickler sagt Ihnen, dass diese systemd-Definition besser ist :).

Schauen Sie sich die Ausgabe von an systemctl status mongod. Wenn der Dienst zum Startzeitpunkt gestartet werden soll, wird in der Loaded:Zeile "enabled" angezeigt. Ansonsten kannst du verwenden systemctl enable mongod. Sie können auch die Option --noweinschließen, die gleichzeitig mongod startet.

sourcejedi
quelle
Vielen Dank! Ich werde systemd studieren und es schließlich verwenden. Vorerst wollte ich das deaktivieren und schließlich das init.d-Skript ausführen, an dem ich gearbeitet habe. Ich ging systemctl disable mongod:; dann mongod.service in mongod-backup.service umbenannt; dann systemctl daemon-reload. Glaubst du, das war richtig? Ich habe gelesen, dass Sie Dateien in / lib / systemd / system / nicht ändern sollten, aber ohne sie umzubenennen, ignorierte systemctl das init.d-Skript.
Natario
Die Dateien in / lib / systemd sind keine Conffiles. Ich kann wirklich nicht empfehlen, ein Debian-Paket zu installieren und seine Dateien zu ändern (und das Paket später zu aktualisieren). Benennen Sie stattdessen das init.d-Skript um, an dem Sie "gearbeitet" haben (vermutlich geändert?). init.d-Skripte sind in der Regel Conffiles. Wenn ein Update eine Conffile ändert (wofür es keinen Grund geben sollte), werden Sie zuerst gewarnt. In diesem Fall würde ich erwarten, dass es Sie benachrichtigt, wenn eine aktualisierte Version des ursprünglichen (effektiv) gelöschten init.d-Skripts jemals verfügbar wurde.
Sourcejedi
Möglicherweise müssten Sie zu den abhängigen Services Bestellabhängigkeiten für Ihren neuen Service hinzufügen mongod. Es besteht auch die Möglichkeit, dass Sie einige strenge Abhängigkeiten entfernen müssen, aber ich hätte es nicht gedacht. Eine sichere Möglichkeit, die betroffenen Dienste zu ändern, besteht darin, sie zu kopieren /etc/systemd/system/und die Kopie zu ändern.
Sourcejedi
Im Allgemeinen halte ich es für einfacher, bei systemd zu bleiben. Sie lernen nun Bash, Init-Funktionen und die rückwärtskompatiblen Funktionen von systemd. Da Sie kein reines SysV-Init-System erlernen, besteht das Risiko, dass Sie Features erwarten, die tatsächlich von systemd stammen, wenn Sie jemals ein solches System verwenden.
Sourcejedi