Das @ Symbol und systemctl und vsftpd


27

Ich habe eine zweiteilige Frage.

  1. Welche Bedeutung hat das @ -Symbol in systemctl-Skripten?

  2. Wie starte ich vsftpd in Fedora 16 (das in einigen Tutorials ein @ in seinem Namen zu enthalten scheint)? Ich habe alles getan, was die Tutorials sagen, und es gibt mir immer noch einen Fehler. http://blog.tuxforge.com/fedora-16-vsftpd/

Was ich getan habe

systemctl enable vsftpd@.service

Was ich sehe

Failed to issue method call: No such file or directory

(Ich habe dies auch mit einem absoluten Pfad versucht, und nachdem ich überprüft habe, dass es keine solche Datei gibt. Die echte Datei enthält kein @ -Zeichen und befindet sich im Verzeichnis / lib / systemd / system /. Ich habe es auch versucht Starten und Aktivieren mit und ohne @ -Symbol funktioniert, aber Starten funktioniert nicht. Ich habe festgestellt, dass der Artikel veraltet ist, aber ich kann den Dienst scheinbar immer noch nicht starten. Wenn ich versuche, eine Verbindung herzustellen, lasse ich es nicht zu.)

EDIT: Ich habe den Dienst irgendwie gestartet, möchte aber trotzdem wissen, was das @ -Symbol in einigen Dienstnamen bedeutet. Auch bekomme ich immer noch eine Login-Fehlernummer # 500 kann das [...] Verzeichnis nicht wechseln, was bedeutet das?

Um es zu starten, habe ich nur getippt

sudo systemctl enable vsftpd.service

sudo systemctl start vsftpd.service (the problem was I was using an absolute path for this I think)

Antworten:


48

Das @Symbol steht für spezielle Dienste, Sockets und andere Einheiten, in denen mehrere Instanzen ausgeführt werden können.

Zum Beispiel, getty@.service ist beispielsweise der Dienst, der Textanmeldeterminals bereitstellt. Wenn Sie Ctrl+ Alt+ drücken F2, getty@tty2.servicewird gestartet und das virtuelle Terminal 2 erstellt.

Ein weiterer Dienst, der diese Funktionalität nutzt, ist OpenVPN. Sie können eine Datei erstellen/etc/openvpn/work.conf , die so konfiguriert ist, dass sie eine Verbindung zum VPN an Ihrem Arbeitsplatz herstellt und anschließend systemctl start openvpn@work.serviceeine Verbindung dazu herstellt. Ebenso könnten Sie erstellen /etc/openvpn/home.confund dann starten, openvpn@home.servicewenn Sie zu Hause ein VPN hatten. Dies verhindert, dass Sie .servicefür jedes VPN, zu dem Sie eine Verbindung herstellen , eine Datei erstellen müssen .

Aber nimm mein Wort nicht dafür. Versuch es! Erstellen wir einen einfachen Dienst, der eine Nachricht an Syslog ausgibt. Erstellen Sie eine Datei /etc/systemd/system/echo@.servicemit folgendem Inhalt:

[Unit]
Description=Echo '%I'

[Service]
Type=oneshot
ExecStart=/bin/echo %i
StandardOutput=syslog

Beachten Sie die %i? systemd füllt das mit was auch immer folgt@ Zeichen , wenn der Dienst gestartet wird. Also versuchen Sie es mit echo@foo.service:

systemctl start echo@foo.service

Dann überprüfen Sie die Tagebuch :

 journalctl -n10

Unten sehen Sie, dass systemd ausgeführt wurde /bin/echo foo :

Feb 24 12:41:01 localhost echo[8412]: foo

Versuchen Sie es jetzt systemctl start echo@bar.service. Dieses Mal wird systemd mit Daten gefüllt%i mit bar:

Feb 24 12:42:51 localhost echo[8432]: bar

Das ist alles dazu! Alles könnte möglicherweise dem @Vorzeichen folgen , da systemd %iin der Service-Definition nur das Vorzeichen ersetzt . OpenVPN verwendet es für die Konfiguration, andere Dienste können es für andere Zwecke verwenden, beispielsweise für eine Portnummer.

Weitere Informationen finden Sie unter man systemd.unit.


1
Werden sie wie normale Dienste gestartet und gestoppt, mit Ausnahme des @ -Symbols? Wenn ich zum Beispiel den Dienst ein zweites Mal starten würde, würde ich ihn dann einfach erneut starten? Wie starte ich mehrere Instanzen?
Rubixibuc

Yup, ändern Sie einfach den Text, der dem @Zeichen folgt , zu was auch immer passend ist. Ich habe ein Beispiel hinzugefügt, das Sie testen können, um zu sehen, wie es funktioniert.
Patches

@Patches: Wo ist ein Dokument für "Das @ -Symbol steht für spezielle Dienste, bei denen mehrere Instanzen ausgeführt werden können."? Ich sehe es nicht unter freedesktop.org/software/systemd/man/systemd.service.html
pevik

Es ist in systemd.unit beschrieben . Es ist auch nützlich für Steckdosen und andere Arten von Einheiten. (Hinzugefügt, um jetzt zu antworten, danke. :-)
Patches
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.