Posso usar um link simbólico como um serviço do systemd?

12

Por exemplo, eu tenho um serviço chamado mysshd.service sob /usr/lib/systemd/system/ directory. Posso criar um link simbólico como:

ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service

para que qualquer operação que eu faça com o fool.service seja refletida para mysshd.service ( systemctl enable/disable start/stop fool.servce )?

Meu propósito é sobrescrever o serviço sshd nativo por um link simbólico do meu próprio serviço sshd.

    
por nick 03.04.2015 / 11:16

3 respostas

8

Até onde eu sei, o systemd não lida com isso particularmente bem. Pelo que entendi, você deseja substituir o comportamento de sshd.service , certo?

Felizmente para você, o systemd é projetado para esse tipo de coisa. Basta colocar sua definição de serviço em /etc/systemd/system/ssh.service , executar systemctl daemon-reload para recarregar os arquivos da unidade e o systemd usará automaticamente essa configuração em vez do sistema ssh.service .

Deseja também ter systemctl enable mysshd.service work? Sem problemas. Na seção [Install] do seu arquivo de unidade, adicione uma linha que diga Alias=mysshd.service . Em seguida, execute systemctl reenable ssh.service para que o systemd corrija os links simbólicos da unidade e você é de ouro.

Agora, você não forneceu detalhes sobre o que o mysshd.service deve fazer. Se é completamente diferente do normal ssh.service , ótimo! Use o método acima. No entanto, se você quiser apenas mudar uma coisa pequena, então você está usando a abordagem errada. O systemd permite que você crie "trechos" de arquivos unitários que serão aplicados sobre os arquivos unitários normais. Isso permite adicionar ou substituir diretivas individuais, permitindo que o restante do arquivo da unidade receba atualizações do gerenciador de pacotes. Para fazer isso, basta criar /etc/systemd/system/ssh.d/my-custom-config.conf (você pode alterar my-custom-config.conf para ser o que quiser e também pode ter vários arquivos de substituição). Nesse arquivo, coloque as diretivas que você deseja alterar ou adicionar ao usual ssh.service . Você pode até adicionar diretivas Alias= , para que systemctl start mysshd.service funcione! Lembre-se de executar systemctl daemon-reload depois de terminar (e, se você usou Alias= , systemctl reenable ssh.service ).

Como um aparte, nunca, sempre altere os arquivos unitários do systemd em /usr/lib/systemd . Sempre! O Padrão da hierarquia do sistema de arquivos exige que /usr seja tratado como somente leitura. Na prática, isso significa que o gerenciador de pacotes manipula /usr (exceto /usr/local ) e você não toca no que o gerenciador de pacotes manipula - especialmente porque o que você alterar provavelmente será substituído. Em vez disso, coloque suas coisas em algum lugar como /etc .

    
por 04.04.2015 / 03:23
1

não costumava ser possível . Mas eles são a partir de hoje.

    
por 04.08.2016 / 14:47
1

Use link com o caminho completo:

systemctl link /home/nick/myservice.service

Note que você não pode vincular um arquivo de serviço que já é um link.

    
por 29.03.2018 / 03:35