Das @ -Symbol und systemctl und vsftpd

11614
rubixibuc

Ich habe eine zweiteilige Frage.

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

  2. Wie starte ich vsftpd in fedora 16 (welches in einigen Tutorials ein @ in seinem Namen enthält)? Ich habe alles getan, was die Tutorials sagen, und es gibt 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, gibt es keine solche Datei. 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 das @ -Zeichen, Aktivieren funktioniert, aber Starten funktioniert nicht Ich weiß , dass der Artikel jetzt veraltet ist, aber ich kann den Dienst immer noch nicht starten.

EDIT: Ich habe den Dienst irgendwie gestartet, möchte aber trotzdem wissen, was das @ -Symbol in einigen Dienstnamen bedeutet. Auch ich bekomme immer noch eine Login-Fehlernummer # 500 kann das Verzeichnis nicht ändern [...], 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) 
20

1 Antwort auf die Frage

38
Patches

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

Beispielsweise getty@.serviceist der Dienst, der Terminals für die Anmeldung von Text bereitstellt. Wenn Sie Ctrl+ Alt+ drücken F2, getty@tty2.servicewird das virtuelle Terminal # 2 erstellt.

Ein weiterer Dienst, der diese Funktionalität verwendet, ist OpenVPN. Sie können eine Datei erstellen /etc/openvpn/work.conf, die so konfiguriert ist, dass Sie an Ihrem Arbeitsplatz eine Verbindung zum VPN herstellen und dann systemctl start openvpn@work.serviceeine Verbindung herstellen kann. In ähnlicher Weise könnten Sie erstellen /etc/openvpn/home.confund dann starten, openvpn@home.servicewenn Sie zu Hause ein VPN haben. 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 Sie einen einfachen Dienst, der eine Meldung 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 das %i? systemd füllt das mit dem, was @beim Start des Dienstes dem Zeichen folgt . Also, fang doch mal an echo@foo.service:

systemctl start echo@foo.service 

Dann überprüfen Sie das Journal :

 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 %imit aufgefüllt bar, so dass Folgendes angezeigt wird :

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

Das ist alles dazu! Dem @Zeichen kann möglicherweise alles folgen, da systemd %iin der Service-Definition einfach damit ersetzt wird . OpenVPN verwendet es für die Konfiguration, andere Dienste verwenden möglicherweise etwas anderes, beispielsweise eine Portnummer.

Weitere Informationen finden Sie unter man systemd.unit.

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 dann einfach wieder von vorne anfangen? Wie fangen Sie mehrere Instanzen an? rubixibuc vor 12 Jahren 0
Ja, ändern Sie einfach den Text nach dem @ -Zeichen in das geeignete Zeichen. Ich habe ein Beispiel hinzugefügt, das Sie testen können, um zu sehen, wie es funktioniert. Patches vor 12 Jahren 0
@Patches: Wo ist ein Dokument für "Das @ -Symbol steht für spezielle Services, in denen mehrere Instanzen ausgeführt werden können"? Ich kann es nicht unter https://www.freedesktop.org/software/systemd/man/systemd.service.html sehen pevik vor 7 Jahren 0
Es ist beschrieben in [systemd.unit] (https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Description). Es ist auch nützlich für [Sockets] (https://www.freedesktop.org/software/systemd/man/systemd.socket.html) und andere Gerätetypen. (Zur Antwort hinzugefügt, danke. :-) Patches vor 7 Jahren 0