Confuso porque o serviço systemd não inicia na inicialização

0

Eu escrevi um daemon simples e quero que meu sistema o inicie automaticamente na inicialização. Meu daemon precisa do daemon do bluetooth para ser iniciado e soquete do UNIX para a saída de dados. O que é um pouco diferente do que pode ser lido na maioria dos manuais e tutoriais sobre o systemd é que, do ponto de vista do daemon, eu quero que o systemd crie um socket para escrever, não escutar. Quando eu inicio o serviço e o soquete manualmente, tudo funciona, mas depois de executar systemctl enable foo.service , meu daemon não é iniciado após a reinicialização. Com base em man systemd.unit , man systemd.target e alguns googling, criei três arquivos de unidade.

Devido ao fato de que parece haver pelo menos algumas maneiras pelas quais as dependências podem ser descritas para o systemd, não sei o que está errado, porque meu serviço não é iniciado automaticamente após a reinicialização. Devo criar o arquivo foo.target ou é desnecessário em um cenário tão simples? Eu também não tenho certeza se WantedBy em foo.socket deve ser definido como foo.target ou mais, talvez sockets.target.

Aqui está um trecho de código dos meus 3 arquivos unitários abaixo. Eu realmente aprecio se alguém puder dar uma olhada e me dar algumas dicas.

############ foo.service file #############################################
[Unit]
Description=Foo Service
Requires=foo.socket

[Service]
Type=simple
ExecStart=/path/to/start

[Install]
WantedBy=foo.target
###########################################################################
############ foo.socket file ##############################################
[Unit]
Description=Foo socket for write, not for listen

[Socket]
ListenDatagram=/run/foo/foo.sk

[Install]
WantedBy=foo.target
###########################################################################
############ foo.target file ##############################################
[Unit]
Description=Foo target
Requires=bluetooth.target
###########################################################################
    
por Al Bundy 23.07.2018 / 17:18

1 resposta

1

Você instruiu systemd para iniciar seu serviço e seu soquete quando o seu alvo for iniciado, mas você não instruiu o alvo não deve ser iniciado na inicialização. Não tem [Install] seção-- é por isso que o seu serviço não tem algum na inicialização.

Um alvo não é necessário para este caso simples. Mova a cláusula Requires= do seu destino para o seu serviço.

Para o WantedBy= em seu serviço, tente usar multi-user.target ou, se seu serviço precisar de rede, network-online.target .

    
por 23.07.2018 / 18:54

Tags