3.5.6. Trabalhando com unidades instanciadas

É possível instanciar múltiplas unidades a partir de um único arquivo de configuração de modelo em tempo de execução. O caractere "@" é usado para marcar o modelo e para associar unidades a ele. As unidades instantâneas podem ser iniciadas a partir de outro arquivo de unidade (usando as opções Requires ou Wants ), ou com o comando systemctl start. As unidades de serviço instantâneas são nomeadas da seguinte forma:

template_name@instance_name.serviço

Onde template_name representa o nome do arquivo de configuração do modelo. Substituir instance_name pelo nome da instância da unidade. Várias instâncias podem apontar para o mesmo arquivo de modelo com opções de configuração comuns para todas as instâncias da unidade. O nome da unidade de modelo tem a forma de:

unit_name@.service

Por exemplo, a seguinte configuração Wants em um arquivo de unidade:

Wants=getty@ttyA.service getty@ttyB.service

primeiro faz a busca por unidades de serviço. Se tais unidades não forem encontradas, a parte entre "@" e o sufixo de tipo é ignorada e systemd pesquisa o arquivo getty@.service, lê a configuração a partir dele, e inicia os serviços.

Por exemplo, o modelo getty@.service contém as seguintes diretrizes:

[Unit]
Description=Getty on %I
…​
[Service]
ExecStart=-/sbin/agetty --noclear %I $TERM
…​

Quando os modelos getty@ttyA.service e getty@ttyB.service são instanciados a partir do modelo acima, Description= é resolvido como Getty on ttyA e Getty on ttyB.

3.5.6.1. Especificadores importantes de unidades

Os caracteres curinga, chamados unit specifiers, podem ser usados em qualquer arquivo de configuração de unidade. Os especificadores de unidade substituem certos parâmetros de unidade e são interpretados em tempo de execução. Tabela 3.13, “Especificadores importantes de unidades” lista os especificadores de unidade que são particularmente úteis para unidades modelo.

Tabela 3.13. Especificadores importantes de unidades

Especificador da unidadeSignificadoDescrição

%n

Nome completo da unidade

Representa o nome completo da unidade incluindo o sufixo do tipo. %N tem o mesmo significado, mas também substitui os caracteres proibidos por códigos ASCII.

%p

Nome do prefixo

Significa um nome de unidade com o sufixo do tipo removido. Para unidades instanciadas, %p significa a parte do nome da unidade antes do caractere "@\ @".

%i

Nome da instância

É a parte do nome da unidade instanciada entre o caractere "@" e o sufixo de tipo. %I tem o mesmo significado, mas também substitui os caracteres proibidos para os códigos ASCII.

%H

Nome do anfitrião

Representa o nome do sistema em funcionamento no momento em que a configuração da unidade é carregada.

%t

Diretório de tempo de execução

Representa o diretório de tempo de execução, que é /run para o usuário root, ou o valor da variável XDG_RUNTIME_DIR para usuários não privilegiados.

Para uma lista completa dos especificadores de unidades, consulte a página do manual systemd.unit(5).