O símbolo @ é para serviços especiais, soquetes e outras unidades nas quais várias instâncias podem ser executadas.
Por exemplo, [email protected] é o serviço que fornece terminais de login de texto. Quando você pressiona Ctrl + Alt + F2 , [email protected] é iniciado, criando o terminal virtual # 2.
Outro serviço que usa essa funcionalidade é o OpenVPN. Você pode criar um arquivo /etc/openvpn/work.conf , configurado para se conectar à VPN em seu local de trabalho e, em seguida, systemctl start [email protected] para se conectar a ele. Da mesma forma, você pode criar /etc/openvpn/home.conf e, em seguida, iniciar [email protected] se tiver uma VPN em casa. Isso evita que você tenha que criar um arquivo .service para cada VPN à qual você se conecta.
Mas não acredite na minha palavra. Experimente! Vamos criar um serviço simples que produza uma mensagem para o syslog. Crie um arquivo /etc/systemd/system/[email protected] com o seguinte conteúdo:
[Unit]
Description=Echo '%I'
[Service]
Type=oneshot
ExecStart=/bin/echo %i
StandardOutput=syslog
Observe o %i ? O systemd preencherá com o que segue o sinal @ quando o serviço for iniciado. Então, tente iniciar [email protected] :
systemctl start [email protected]
Em seguida, verifique o jornal :
journalctl -n10
Na parte inferior, você verá que o systemd executou /bin/echo foo :
Feb 24 12:41:01 localhost echo[8412]: foo
Agora, tente systemctl start [email protected] . Dessa vez, o systemd preencherá %i com bar , então você verá:
Feb 24 12:42:51 localhost echo[8432]: bar
Isso é tudo que existe para isso! Qualquer coisa poderia potencialmente seguir o sinal @ , já que o systemd apenas substitui %i na definição de serviço por ele. O OpenVPN o utiliza para configuração, outros serviços podem usar para outra coisa, como um número de porta.
Para mais informações, consulte man systemd.unit .