Aktivieren von 'verknüpften' Einheitendateien in Systemd

10

Ich bin immer noch mit systemd fertig und bin auf etwas gestoßen. Es ist nicht so sehr ein Problem, aber ich würde gerne mehr darüber erfahren, wie das ist. Ich konnte anderswo keinen Hinweis darauf finden.

Zunächst einmal verstehe ich, dass benutzerdefinierte Einheitendateien für Dienste eingehen sollten /etc/systemd/system. Für die Verwaltung unserer Server wäre es jedoch hilfreich, wenn sich die Gerätedateien an anderer Stelle befinden könnten.

In der Dokumentation habe ich gesehen, dass Sie Gerätedateien wie folgt "verknüpfen" können:

systemctl link /path/to/servicename.service

Dadurch wird ein Link zu den oben genannten in erstellt /etc/systemd/system. Sie können diesen Dienst jetzt starten / stoppen. An der Oberfläche schien dies eine gute Möglichkeit für uns zu sein, unsere Dienstleistungen zu verwalten.

Der Versuch, eine solche "verknüpfte" Einheitendatei zu aktivieren, führt jedoch zu einem Fehler:

root@test1:/etc/systemd/system# systemctl link /root/myservice.service 
Created symlink from /etc/systemd/system/myservice.service to /root/myservice.service.

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/root/myservice.service; linked; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Failed to execute operation: No such file or directory

Wenn Sie genau dieselbe Einheitendatei verwenden, die jedoch kopiert und /etc/systemd/systemnicht verlinkt wurde, erhalten Sie:

root@test1:/etc/systemd/system# cp -p /root/myservice.service .

root@test1:/etc/systemd/system# systemctl daemon-reload 

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /etc/systemd/system/myservice.service.

Aus diesem Grund scheint es nicht möglich zu sein, den Aufruf von in Einheitendateien verknüpften Dateien beim Systemstart zu aktivieren.

Wenn dies der Fall ist, wozu dient die Link-Funktionalität? Aus den Dokumenten geht hervor:

Link DATEINAME

Verknüpfen Sie eine Einheitendatei, die sich nicht in den Suchpfaden für Einheitendateien befindet, mit dem Suchpfad für Einheitendateien. Dies erfordert einen absoluten Pfad zu einer Einheitendatei. Der Effekt kann mit Deaktivierung rückgängig gemacht werden. Dieser Befehl bewirkt, dass eine Einheitendatei für den Start und andere Befehle verfügbar ist, obwohl sie nicht direkt im Einheitensuchpfad installiert ist.

Tom17
quelle

Antworten:

13

Die Manpage ist irreführend.

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

Das erste macht es Ihnen möglich systemctl start myservice. Die zweite ermöglicht es, myserviceautomatisch gestartet zu werden (was, wie @Julien hervorhob, automatisch das hinzufügt link).

Ich denke ... ich habe den ganzen Tag versucht, meinen Kopf darum zu wickeln.

Auspex
quelle
1
Beachten Sie, dass dies systemctl enableauch ausreicht systemctl link, sodass Sie die 2 Befehle nicht eingeben müssen ;-)
Julien
@ Julien Oh, wo wir dich, als ich das letzte Jahr schrieb :-) Ich glaube, das habe ich letzten Monat endlich gemerkt!
Auspex
9

Wenn Sie einen Dienst über einen anderen Pfad als die Standardpfade aktivieren, sollten Sie den vollständigen Pfad verwenden. Durch Aktivieren wird auch der Link für Sie erstellt:

systemctl enable /root/myservice.service

Nach der Aktivierung können Sie mit dem Dienstnamen starten / stoppen / status

systemctl start myservice

Ein paar Einschränkungen hier:

Nickvane
quelle