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/system
vez 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.
systemctl enable
isso também funcionarásystemctl link
, então não há necessidade de digitar os 2 comandos ;-)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ê:
Uma vez ativado, você pode iniciar / parar / status com o nome do serviço
Algumas advertências aqui:
fonte