Como criar um alvo systemd?

14

Depois de pesquisar bastante um post, vídeo do Youtube e "documentação" sobre o assunto do systemd, ainda estou perplexo.

O link ( link ) parecia promissor, mas foi um pouco vago (para mim).

Pergunta

Como alguém poderia criar um destino systemd personalizado (IE: foo.target) para que um possa inicializar com unidades de .service selecionadas?

Exemplo

  1. O sistema inicializa o default.target (link simbólico de "foo.target")
  2. "foo.target" inicia apenas um servidor X barebones e um programa GUI, digamos "gvim".

Razão

Estou apenas procurando criar um destino personalizado para iniciar rapidamente um programa X. Eu seria legal excluir todos os serviços que não preciso.

Obrigado antecipadamente!

    
por Pilbox 08.08.2016 / 03:48

1 resposta

14

A leitura de man 5 systemd.unit e man 5 systemd.target nos informa que os arquivos de unidade são usados para definir destinos, bem como todo o resto do sistema. Não há documentação específica sobre como criar um destino , por isso é difícil determinar como isso deve ser feito, mas não é muito diferente da criação de um serviço.

Ao criar seu destino, você precisará fazer links simbólicos para o diretório target.wants do diretório de serviços systemd. Então você pode definir / inicializar o seu alvo. Veja como isso pode parecer, dado o seu exemplo.

/etc/systemd/system/foo.target

Este é o arquivo de unidade do alvo. Se graphical.target é tomado como exemplo, podemos criar nosso próprio alvo usando-o como base.

[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes

Para explicar as opções tiradas dos manpages do systemd;

  • Description - descreve o destino. Você deve entender
  • Requires - Dependências rígidas do alvo. Você deve deixar o sistema básico iniciar antes de iniciar seu próprio serviço (s)
  • Wants - dependências suaves. O alvo não requer que estes iniciem.
  • Conflicts - Se uma unidade tiver uma configuração de Conflitos em outra unidade, iniciar a primeira interromperá a última e vice-versa.
  • After - Botas após esses serviços
  • AllowIsolate - Realmente para você e seu ambiente. Detalhes estão disponíveis na manpage systemd.unit(5)

/etc/systemd/system/foo.target.wants /

Este é o diretório onde você irá vincular os serviços que você cria / exige para o seu alvo. É equivalente à opção Wants= no arquivo da unidade. Crie este diretório e crie links simbólicos assim; %código%. Isso cria um link simbólico de bar.service no diretório do sistema para o seu diretório foo.target.wants.

Acho que criar um arquivo de unidade para um serviço está fora do escopo desta resposta, e essa pergunta é definitivamente mais documentada, então deixarei isso de lado por enquanto. Quando você criar seu arquivo unitário, apenas crie uma ligação simbólica no diretório target.wants ou adicione-o à diretiva ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service .

    
por 08.08.2016 / 07:44