Systemd permite que você crie unidades de modelo, conforme documentado em systemd.unit .
Há uma série de variáveis que você pode usar em sua unidade de modelo.
Estou interessado em "%j"
:
Esta é a string entre o último "-" e o final do nome do prefixo.
O "nome do prefixo" também é definido:
Para unidades instanciadas, isso se refere à string antes do primeiro caractere "@" do nome da unidade.
Estou claro o que eles são, não claro por que eles existem.
Eu estou supondo que talvez eles estejam executando várias versões do mesmo serviço. Qual é um exemplo do mundo real de como isso é usado?
As unidades podem ter configurações adicionais em
.d/
diretórios ao lado da unidade. Por exemplo,foo.service
pode ser estendido viafoo.service.d/*.conf
.As unidades de modelo usarão dois diretórios – instância e modelo, portanto
[email protected]
, serão estendidas de ambos[email protected]/*.conf
e[email protected]/*.conf
. Dessa forma, você pode estender todas as instâncias da unidade de uma só vez. Em ambos os casos, você a unidade e suas configurações de extensão podem usar %i para obter o bit "ttyS1".No entanto, algumas unidades não podem usar modelos, por exemplo, fatias (representando cgroups) são nomeadas
user-<UID>.slice
e nãouser@<UID>.slice
porque o nome dessas unidades representa um caminho do sistema de arquivos (o traço é mapeado para uma barra e, portanto, "user-123.slice" é um filho de " usuário.fatia").Como se deseja poder configurar todas as fatias de usuário individuais (por exemplo, dar a cada fatia x% de memória), um mecanismo semelhante foi adicionado para unidades que usam nomes semelhantes a caminhos: semelhante ao exemplo getty acima, a unidade
user-1000.slice
pode ser estendida de ambosuser-1000.slice.d/
euser-.slice.d/
, com arquivos no último diretório genérico podendo usar %j para obter o bit "1000".Este último exemplo é meio usado na prática pela instalação padrão do systemd:
Um exemplo disso pode ser unidades de sistema que se referem a caminhos no nome. Em tais unidades,
/
é substituído por-
(e a entrelinha-
é eliminada). Por exemplo, uma unidade de montagem para/home/muru
seria nomeadahome-muru.mount
. Da mesma forma, posso ver outros nomes de unidade baseados em caminho quando executosystemctl list-units
:Em muitos deles, o último componente do caminho, que seria a parte dada por
%j
, pode ser útil dentro da unidade. Não sei se algum deles realmente usa o nome, mas pode ser conveniente, por exemplo, usar%j
para obter o nome de usuário de um gerador de unidades de montagem para diretórios em/home
, ou em/run/user
, ou similar.