Zum Beispiel habe ich einen Dienst namens mysshd.service
unter /usr/lib/systemd/system/
Verzeichnis. Kann ich einen symbolischen Link erstellen, wie zum Beispiel:
ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service
so dass jede Operation, die ich mit fool.service mache, in mysshd.service
( systemctl enable/disable start/stop fool.servce
) reflektiert wird ?
Mein Ziel ist es, den nativen sshd-Dienst durch eine symbolische Verknüpfung meines eigenen sshd-Dienstes zu überschreiben.
Antworten:
Soweit ich weiß, wird systemd nicht besonders gut damit umgehen. Wie ich es verstehe, möchten Sie das Verhalten von überschreiben
sshd.service
, nicht wahr?Zum Glück ist systemd für diese Art von Dingen ausgelegt. Geben Sie einfach Ihre Service-Definition ein
/etc/systemd/system/ssh.service
, führen Siesystemctl daemon-reload
den Befehl aus , um die Unit-Dateien neu zu laden, und systemd verwendet diese Konfiguration automatisch anstelle des Systemsssh.service
.Willst du auch
systemctl enable mysshd.service
arbeiten? Kein Problem. Fügen Sie in dem[Install]
Abschnitt Ihrer Unit-Datei eine Zeile hinzu, die besagtAlias=mysshd.service
.systemctl reenable ssh.service
Führen Sie dann den Befehl aus , damit das System die Einheiten-Symlinks repariert, und Sie sind goldrichtig.Nun, Sie haben nicht genau angegeben, was
mysshd.service
zu tun ist. Wenn es ganz anders ist als normalssh.service
, großartig! Verwenden Sie die obige Methode. Wenn Sie jedoch nur eine Kleinigkeit ändern möchten, verwenden Sie den falschen Ansatz. Mit systemd können Sie "Snippets" von Unit-Dateien erstellen, die über die normalen Unit-Dateien gelegt werden. Auf diese Weise können Sie einzelne Anweisungen hinzufügen oder überschreiben, während der Rest der Einheitendatei Aktualisierungen vom Paketmanager erhält. Dazu erstellen/etc/systemd/system/ssh.d/my-custom-config.conf
Sie einfach (Sie können ändernmy-custom-config.conf
, was Sie möchten, und Sie können auch mehrere Überschreibungsdateien haben). Platzieren Sie in dieser Datei alle Anweisungen, die Sie ändern oder zu den üblichen hinzufügen möchtenssh.service
. Sie können sogarAlias=
Direktiven hinzufügen , damit dassystemctl start mysshd.service
funktioniert! Denken Sie daran, auszuführensystemctl daemon-reload
nachdem Sie fertig sind (und, wenn Sie verwendet habenAlias=
,systemctl reenable ssh.service
).Als Nebenwirkung , nie, nie systemd Unit - Dateien ändern in
/usr/lib/systemd
. Je! Der Dateisystem-Hierarchie-Standard erfordert, dass/usr
er als schreibgeschützt behandelt wird. In der Praxis bedeutet dies, dass der Paketmanager/usr
(mit Ausnahme von/usr/local
) behandelt und Sie nicht berühren, was der Paketmanager behandelt - insbesondere, weil alles, was Sie ändern, wahrscheinlich irgendwann überschrieben wird. Legen Sie stattdessen Ihre Sachen in irgendwo wie/etc
.quelle
foo.service
, führen Sie es aussudo systemctl edit foo.service
und es speichert alles, was Sie eingegeben haben/etc/systemd/system/foo.service.d/override.conf
.Alias=
funktioniert die Direktive NICHT beim Überschreiben von Dateien. Siehe github.com/systemd/systemd/issues/1090systemctl edit
als ich diese Antwort schrieb. Fühlen Sie sich frei, meine Antwort zu bearbeiten, um denAlias=
Fehler wiederzugeben (setzen Sie "OK mit Beantworter" oder etwas in die Bearbeitungsnachricht). guter Fang.Verwenden Sie
link
mit dem vollständigen Pfad:Beachten Sie, dass Sie keine Servicedatei verknüpfen können, die an sich bereits eine Verknüpfung ist.
quelle
Symlinks waren früher nicht möglich . Aber sie sind ab heute.
quelle