O símbolo @ e systemctl e vsftpd

27

Eu tenho uma pergunta em duas partes.

  1. Qual é o significado do símbolo @ nos scripts systemctl?

  2. Como iniciar o vsftpd no fedora 16 (que em alguns tutoriais parece conter um @ no nome)? Eu fiz tudo o que dizem os tutoriais, e isso ainda me dá um erro. http://blog.tuxforge.com/fedora-16-vsftpd/

O que eu fiz

systemctl enable [email protected]

O que eu vejo

Failed to issue method call: No such file or directory

(Eu tentei isso com um caminho absoluto também e, depois de verificar, não existe esse arquivo. O arquivo real não contém um sinal @ e está localizado no diretório / lib / systemd / system /. Também tentei iniciar e ativar com e sem o símbolo @, ativar funciona, mas iniciar não. Percebo que o artigo está obsoleto, mas ainda não consigo iniciar o serviço. Quando tento conectar, não me deixa)

EDIT: recebi o serviço para iniciar de alguma forma, mas ainda gostaria de saber o que o símbolo @ significa em alguns nomes de serviço. Também estou recebendo um erro de logon número 500 não pode mudar de diretório, [...] o que isso significa?

Para começar, digitei

sudo systemctl enable vsftpd.service

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

Respostas:

48

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 nº 2.

Outro serviço que usa essa funcionalidade é o OpenVPN. Você pode criar um arquivo /etc/openvpn/work.conf, configurado para se conectar à VPN no seu local de trabalho e, em seguida, systemctl start [email protected]para se conectar a ela. Da mesma forma, você pode criar /etc/openvpn/home.confe iniciar [email protected]se você tiver uma VPN em casa. Isso evita que você precise criar um .servicearquivo para cada VPN à qual você se conecta.

Mas não aceite minha palavra. Experimente! Vamos criar um serviço simples que envie 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á isso com o que segue o @sinal quando o serviço for iniciado. Então, tente começar [email protected]:

systemctl start [email protected]

Em seguida, verifique o diário :

 journalctl -n10

Na parte inferior, você verá que o systemd foi executado /bin/echo foo:

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

Agora tente systemctl start [email protected]. Desta vez, systemd preencherá %icom bar, assim que você vai ver:

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

Isso é tudo! Qualquer coisa poderia seguir o @sinal, pois o systemd apenas substitui %ina definição de serviço por ele. O OpenVPN usa-o 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.

Patches
fonte
11
eles foram iniciados e parados como serviços normais, exceto pela inclusão do símbolo @? Por exemplo, se eu iniciasse o serviço pela segunda vez, começaria novamente? Como você inicia várias instâncias?
rubixibuc
Sim, basta alterar o texto após o @sinal para o que for apropriado. Adicionei um exemplo que você pode testar para ver como funciona.
Patches
@Patches: onde está um documento para "O símbolo @ é para serviços especiais onde várias instâncias podem ser executadas."? Não o vejo em freedesktop.org/software/systemd/man/systemd.service.html
pevik
Está descrito em systemd.unit . Também é útil para soquetes e outros tipos de unidades. (Adicionado para responder agora, obrigado. :-)
Patches