@
Символ для специальных служб, розеток и других подразделений, где несколько экземпляров могут быть запущены.
Например, getty@.service
это сервис, который предоставляет текстовые терминалы входа в систему. При нажатии кнопки Ctrl+ Alt+ F2, getty@tty2.service
запускается, создание виртуального терминала # 2.
Другой сервис, который использует эту функциональность, - OpenVPN. Вы можете создать файл /etc/openvpn/work.conf
, настроенный для подключения к VPN на рабочем месте, а затем systemctl start openvpn@work.service
подключиться к нему. Точно так же вы можете создать /etc/openvpn/home.conf
, а затем запустить, openvpn@home.service
если у вас дома есть VPN. Это избавляет вас от необходимости создавать .service
файл для каждой VPN, к которой вы подключаетесь.
Но не верьте мне на слово. Попробуйте! Давайте создадим простой сервис, который выводит сообщение в системный журнал. Создайте файл /etc/systemd/system/echo@.service
со следующим содержимым:
[Unit] Description=Echo '%I' [Service] Type=oneshot ExecStart=/bin/echo %i StandardOutput=syslog
Заметьте %i
? systemd заполняет это всем, что следует за @
знаком при запуске службы. Итак, попробуйте начать echo@foo.service
:
systemctl start echo@foo.service
Затем проверьте журнал :
journalctl -n10
Внизу вы увидите, что systemd работает /bin/echo foo
:
Feb 24 12:41:01 localhost echo[8412]: foo
Теперь попробуй systemctl start echo@bar.service
. На этот раз, Systemd заполнит %i
с bar
, так что вы увидите:
Feb 24 12:42:51 localhost echo[8432]: bar
Это все, что нужно сделать! Все может потенциально следовать за @
знаком, поскольку systemd просто заменяет его %i
в определении сервиса. OpenVPN использует его для конфигурации, другие службы могут использовать что-то еще, например, номер порта.
Для получения дополнительной информации см man systemd.unit
.