Das @
Symbol steht für spezielle Dienste, Sockets und andere Einheiten, auf denen mehrere Instanzen ausgeführt werden können.
Beispielsweise getty@.service
ist der Dienst, der Terminals für die Anmeldung von Text bereitstellt. Wenn Sie Ctrl+ Alt+ drücken F2, getty@tty2.service
wird 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.service
eine Verbindung herstellen kann. In ähnlicher Weise könnten Sie erstellen /etc/openvpn/home.conf
und dann starten, openvpn@home.service
wenn Sie zu Hause ein VPN haben. Dies verhindert, dass Sie .service
fü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@.service
mit 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 %i
mit 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 %i
in 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
.