Qual é o equivalente do systemd $ UPSTART_JOB?

3

No princípio DRY, em vez de fazer um monte de configurações systemd ligeiramente diferentes, prefiro usar um, link simbólico ou vinculado a diferentes nomes como myservice1.service , myservice2.service , ...

Com scripts do SysV, posso usar $0 para determinar o nome do script de início, com os arquivos Upstart .conf , há a variável $UPSTART_JOB automática, mas andei procurando na documentação do systemd algo similar com sem sucesso. Alguma idéia?

    
por jcomeau_ictx 14.05.2017 / 14:53

2 respostas

3

O Systemd possui modelos, que permitem que um único arquivo de unidade aceite um argumento e inicie instâncias diferentes. O exemplo clássico seria getty:

~ systemctl cat [email protected] | grep Exec
ExecStart=-/sbin/agetty --noclear %I $TERM

Se você usar systemctl start getty@tty7 , o %I será substituído por tty7 antes que o systemd inicie o serviço.

Seria mais fácil usar isso no arquivo myservice.service . Lembre-se de nomeá-lo como [email protected] e use %I ou %i na linha de comando ExecStart .

Relacionados:

por 14.05.2017 / 15:05
2

%p (com escape) ou %P (sem escape) é o equivalente a $UPSTART_JOB . De Noções básicas sobre unidades Systemd e arquivos de unidade :

A seguir, alguns dos especificadores mais comuns serão substituídos quando uma unidade de instância for interpretada com as informações relevantes:

  • %n : Em qualquer lugar onde isso aparece em um arquivo de modelo, o nome completo da unidade resultante será inserido.
  • %N : é o mesmo que o acima, mas qualquer escape, como aqueles presentes nos padrões de caminho de arquivo, será revertido.
  • %p : Referencia o prefixo do nome da unidade. Esta é a parte do nome da unidade que vem antes do símbolo @ .
  • %P : é o mesmo que acima, mas com qualquer escape invertido.
  • %i : faz referência ao nome da instância, que é o identificador que segue o @ na instância. Esse é um dos especificadores mais usados, porque será garantido como dinâmico. O uso desse identificador incentiva o uso de identificadores significativos de configuração. Por exemplo, a porta na qual o serviço será executado pode ser usada como o identificador da instância e o modelo pode usar esse especificador para configurar a especificação da porta.
  • %I : Este especificador é o mesmo que o acima, mas com qualquer escape invertido.
  • %f : isso será substituído pelo nome da instância sem escape ou pelo nome do prefixo, prefixado com / .
  • %c : Isso indicará o grupo de controle da unidade, com a hierarquia pai padrão de /sys/fs/cgroup/systemd/ removida.
  • %u : o nome do usuário configurado para executar a unidade.
  • %U : O mesmo que acima, mas como um UID numérico em vez de um nome.
  • %H : O nome do host do sistema que está executando a unidade.
  • %% : isso é usado para inserir um sinal de porcentagem literal.

Usando os identificadores acima em um arquivo de modelo, o systemd preencherá os valores corretos ao interpretar o modelo para criar uma unidade de instância.

O crédito vai para muru para a referência 'modelo' que melhorou os resultados da minha pesquisa.

    
por 14.05.2017 / 20:12

Tags