Habilitando arquivos de unidade 'vinculados' no Systemd

10

Ainda estou começando a entender o systemd e encontrei algo. Não é tanto um problema, mas eu gostaria de aprender mais sobre como isso é. Não encontrei nenhuma referência a isso em nenhum outro lugar.

Primeiro, entendo que os arquivos de unidades personalizadas para serviços devem ser inseridos /etc/systemd/system. No entanto, seria bom para o gerenciamento de nossos servidores se os arquivos da unidade pudessem estar localizados em outro lugar.

Na documentação, vi que você pode 'vincular' arquivos de unidade da seguinte forma:

systemctl link /path/to/servicename.service

Isso criará um link para o acima em /etc/systemd/system. Agora você pode iniciar / parar este serviço. Aparentemente, essa parecia uma boa maneira de gerenciar nossos serviços.

No entanto, tentar ativar um arquivo de unidade 'vinculado' resulta em falha:

root@test1:/etc/systemd/system# systemctl link /root/myservice.service 
Created symlink from /etc/systemd/system/myservice.service to /root/myservice.service.

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/root/myservice.service; linked; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Failed to execute operation: No such file or directory

Usando exatamente o mesmo arquivo de unidade, mas copiado para em /etc/systemd/systemvez de vinculado, você obtém:

root@test1:/etc/systemd/system# cp -p /root/myservice.service .

root@test1:/etc/systemd/system# systemctl daemon-reload 

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /etc/systemd/system/myservice.service.

A partir disso, parece que não é possível ativar os arquivos vinculados nas unidades a serem chamados na inicialização do sistema.

Se for esse o caso, qual é o objetivo da funcionalidade 'link'? Dos documentos, ele diz:

link FILENAME

Vincule um arquivo de unidade que não esteja nos caminhos de pesquisa de arquivo de unidade no caminho de pesquisa de arquivo de unidade. Isso requer um caminho absoluto para um arquivo de unidade. O efeito disso pode ser desfeito com desativar. O efeito deste comando é que um arquivo de unidade está disponível para iniciar e outros comandos, embora não esteja instalado diretamente no caminho de pesquisa da unidade.

Tom17
fonte

Respostas:

13

A página do manual é enganosa.

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

O primeiro possibilita que você faça systemctl start myservice. O segundo possibilita myservicea inicialização automática (que, como apontou @Julien, adiciona automaticamente o link).

Eu acho ... Eu tenho tentado entender isso o dia todo.

Auspex
fonte
1
note que systemctl enableisso também funcionará systemctl link, então não há necessidade de digitar os 2 comandos ;-)
Julien
@ Julien Oh, onde nós, quando escrevi isso no ano passado :-) Acho que finalmente percebi isso no mês passado!
Auspex
9

Ao ativar um serviço de outro caminho que não seja o padrão, você deve usar o caminho completo. Ativar também criará o link para você:

systemctl enable /root/myservice.service

Uma vez ativado, você pode iniciar / parar / status com o nome do serviço

systemctl start myservice

Algumas advertências aqui:

nickvane
fonte