A unidade systemd gerada não inicia na inicialização

5

Eu tenho um script de gerador (como descrito por man systemd.generator ) no diretório /etc/systemd/system-generators/ .

O gerador é executado na inicialização e gera com êxito um arquivo de unidade no diretório /run/systemd/generator.late/ (usando o argumento ARGV[3] ). O gerador também adiciona o symlink a /run/systemd/generator.late/multi-user.target.wants/ , pois quero iniciar o serviço na inicialização (especificamente quando a rede está ativa).

O arquivo da unidade e o link simbólico são gerados com sucesso. O problema é que o serviço não é iniciado automaticamente.

Quando eu emito o comando service myService status , ele diz inativo e o log está vazio, o que me faz acreditar que ele nem sequer tentou iniciar o serviço. Se eu faço service myService start , ele começa (= o arquivo da unidade está ok).

Em uma tentativa de encontrar a solução para esse problema, copiei esse arquivo de unidade gerado para /etc/systemd/system e adicionei manualmente o symlink a /etc/systemd/system/multi-user.target.wants e reiniciei a máquina. O serviço DID começa na inicialização.

Isso tudo me faz pensar que o link de /run/systemd/generator.late/multi-user.target.wants/ para minha unidade não é suficiente para iniciar o serviço gerado . Eu inspecionei outros arquivos de unidade gerados pelo sistema em /run/systemd/generator.late/ e eles parecem fazer exatamente a mesma coisa e estão usando o symlink como eu faço. Então, o que está acontecendo aqui?

Existe uma maneira de solucionar isso? O link simbólico estou criando errado? Preciso fazer algo mais do que apenas o link simbólico?

O script do gerador final é assim:

#!/bin/bash

serviceName=myService
bin=/path/to/my/executable
generatorDir=$3
unitFile=$generatorDir/$serviceName.service

cat > "$unitFile" <<EOF
[Unit]
Description=$serviceName service
After=network.target

[Service]
Type=simple
ExecStart=$bin

[Install]
WantedBy=multi-user.target
EOF

mkdir "$generatorDir/multi-user.target.wants" 2>/dev/null
ln -s "$unitFile" "$generatorDir/multi-user.target.wants/$serviceName.service"

Nota: o script real é um pouco mais complicado, este é apenas um exemplo minimalista.

Estou usando o Ubuntu 16.10. Fornecerei informações adicionais, se necessário.

    
por Markos 08.11.2016 / 17:24

1 resposta

1

A maneira de solucionar isso é inicializar o sistema e, quando o serviço não iniciar como esperado, você poderá executar o comando:

systemd-analyze dump

Isso gera uma lista muito detalhada de informações sobre cada unidade, incluindo as dependências. A partir disso, você geralmente consegue descobrir por que sua unidade não entrou em estado ativo.

    
por 12.07.2017 / 16:21

Tags