Qual é a “maneira apropriada” de criar um serviço systemd em um sistema montado (não inicializado)?

0

Há muitas instruções disponíveis para criar arquivos básicos de serviço systemd , mas todas parecem (com razão ) para instruir você a fazer chamadas para systemctl daemon-reload e systemctl enable . Se você precisar adicionar um serviço a uma unidade que montou, mas não inicializou (pense em orquestração do sistema), como você faria isso simplesmente gravando no sistema de arquivos (arquivos, diretórios, links simbólicos).

Tenho certeza de que haverá alguns "depende de onde seu X vive" e está tudo bem. Isso pode ter portabilidade limitada (ou não). Eu só quero ter certeza de que meu plano funciona.

Esse plano é:

  1. Grave um arquivo de serviço em /usr/lib/systemd/system/
  2. Ligação simbólica a partir de /etc/systemd/system/multi-user.target.wants/
por Bruno Bronosky 02.04.2018 / 10:26

2 respostas

2

O que você está sugerindo é essencialmente como systemctl enable funciona: ele aparece na seção [Install] do arquivo de serviço e adiciona um link simbólico ao diretório .target.wants apropriado indicado por WantedBy= . De acordo com a página systemd.unit man , existem algumas outras diretivas que você precisa para olhar para duplicar como systemctl faz isso:

  • Alias= cria um symlink no mesmo diretório que a unidade
  • RequiredBy= cria um symlink no diretório .target.requires apropriado
  • Also= instala unidades relacionadas (veja cada uma delas para instalações vinculadas)
  • DefaultInstance= adiciona um symlink com um nome padrão para unidades instanciadas (por exemplo, multi-user.target.wants/[email protected] - > [email protected] )

No entanto, a menos que seu sistema de arquivos montado seja para uma arquitetura completamente diferente, você provavelmente não precisará criá-los manualmente. systemctl funciona muito bem para instalar / desinstalar arquivos unitários, mesmo se systemd não estiver em execução, portanto, você não deve ter problemas usando systemctl enable e disable (use chroot para executar na raiz do diretório correta) ; Obviamente, você não precisa executar daemon-reload , já que não há processo daemon! Eu uso esse método no final de uma instalação do Gentoo para adicionar unidades de inicialização como systemd-networkd e amigos, e isso funcionou sem problemas para mim.

    
por 02.04.2018 / 14:11
1

Use systemctl enable com o sinalizador --root . Esse sinalizador não apenas configura o diretório raiz para arquivos de procura de unidade, mas também instrui systemctl a operar diretamente no sistema de arquivos, em vez de se comunicar com o daemon do sistema.

    
por 08.04.2018 / 20:22

Tags