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.