Por exemplo, eu tenho um serviço nomeado mysshd.service
no /usr/lib/systemd/system/
diretório 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 em mysshd.service
( systemctl enable/disable start/stop fool.servce
)?
Meu objetivo é substituir o serviço sshd nativo por um link simbólico do meu próprio serviço sshd.
Respostas:
Até onde eu sei, o systemd não vai lidar com isso particularmente bem. Pelo que entendi, você deseja substituir o comportamento de
sshd.service
, certo?Felizmente para você, o systemd foi projetado para esse tipo de coisa. Basta colocar sua definição de serviço
/etc/systemd/system/ssh.service
, executarsystemctl daemon-reload
para recarregar os arquivos da unidade, e o systemd usará automaticamente essa configuração em vez do sistemassh.service
.Quer
systemctl enable mysshd.service
trabalhar também? Sem problemas. Na[Install]
seção do seu arquivo de unidade, adicione uma linha que dizAlias=mysshd.service
. Em seguida, executesystemctl reenable ssh.service
para que o systemd conserte os links simbólicos da unidade, e você estará dourado.Agora, você não forneceu detalhes sobre o que
mysshd.service
deve fazer. Se é completamente diferente do normalssh.service
, ótimo! Use o método acima. No entanto, se você quiser apenas mudar uma coisa pequena, está usando a abordagem errada. O systemd permite criar "trechos" de arquivos de unidades que serão aplicados sobre os arquivos de unidades normais. Isso permite adicionar ou substituir diretivas individuais enquanto permite 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 mudarmy-custom-config.conf
para o que quiser e também pode ter vários arquivos de substituição). Nesse arquivo, coloque as diretivas que você deseja alterar ou adicione às habituaisssh.service
. Você pode até adicionarAlias=
diretivas, para quesystemctl start mysshd.service
funcione! Lembre-se de executarsystemctl daemon-reload
depois que você fez (e, se você usouAlias=
,systemctl reenable ssh.service
).Como um aparte, nunca, nunca altere os arquivos da unidade systemd
/usr/lib/systemd
. Sempre! O padrão de hierarquia do sistema de arquivos exige que/usr
seja tratado como somente leitura. Na prática, isso significa que o gerenciador de pacotes lida com/usr
(exceto/usr/local
) e você não toca no que o gerenciador de pacotes lida - especialmente porque o que quer que você altere provavelmente será sobrescrito. Em vez disso, coloque suas coisas em algum lugar como/etc
.fonte
foo.service
, executesudo systemctl edit foo.service
e ele salvará o que você digitou/etc/systemd/system/foo.service.d/override.conf
.Alias=
diretiva NÃO funciona em arquivos de substituição. Veja github.com/systemd/systemd/issues/1090systemctl edit
no momento em que escrevi esta resposta. fique à vontade para editar minha resposta para refletir oAlias=
erro (insira "OK com o respondente" ou algo na mensagem de edição). boa pegada.Use
link
com o caminho completo:Observe que você não pode vincular um arquivo de serviço que já é um link.
fonte
Os links simbólicos não costumavam ser possíveis . Mas eles são a partir de hoje.
fonte