Como posso habilitar vários arquivos de unidade systemd com o mesmo especificador de instância?

1

Sempre que eu habilitar um determinado serviço systemd instanciado, quero que dois timers com o mesmo especificador de instância sejam habilitados também. É assim que meu arquivo de unidade foo @ .service se parece:

[Unit]
Description=Does something cool
Documentation=man:foo(1)

[Service]
Type=forking
ExecStart=/usr/bin/foo %i
PIDFile=%t/foo/foo.pid
StandardOutput=journal

[Install]
WantedBy=network-online.target
Also=bar1@%i.timer
Also=bar2@%i.timer

Executando systemctl enable [email protected] retornos:

Failed to enable unit: Invalid argument

Se eu remover os especificadores de instância da seção [Install] e substituí-los por nomes de instância específicos (assim parece o seguinte), então funciona muito bem.

...
[email protected]
[email protected]

A página man systemd.unit (5) diz que o especificador % i é interpretado na seção de instalação, então o que dá?

The following specifiers are interpreted in the Install section: %n, %N, %p, %i, %U, %u, %m, %H, %b, %v.
    
por Garrett 17.08.2016 / 00:49

1 resposta

0

Este parece ser um bug com o systemd que se reproduz para a diretiva Also na seção [Install] .

No entanto, há uma solução alternativa que você pode usar para fornecer a mesma funcionalidade.

Suponha que você tenha o arquivo [email protected] e queira um arquivo de unidades correspondente. Adicione a cláusula na diretiva WantedBy . Ative as unidades .timer primeiro com systemctl enable [email protected] etc.

[Install]
WantedBy=network-online.target bar1@%i.timer bar2@%i.timer

O acima funciona bem para iniciar vários serviços mpd via ativação de soquete usando um modelo de serviço e vários arquivos de soquete.

    
por 28.11.2016 / 22:22

Tags