Ativando arquivos unitários 'vinculados' no Systemd

7

Ainda estou lidando com o systemd e me deparei com algo. Não é tanto um problema, mas eu gostaria de aprender mais sobre como isso é. Eu não encontrei nenhuma referência a isso em outro lugar.

Primeiramente, eu entendo que os arquivos de unidade personalizados para serviços devem estar em /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" os arquivos da unidade assim:

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. Na superfície, isso parecia ser uma boa maneira de gerenciar nossos serviços.

No entanto, tentar ativar esse 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 /etc/systemd/system em 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 de unidade vinculados a serem chamados na inicialização do sistema.

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

link FILENAME

Link a unit file that is not in the unit file search paths into the unit file search path. This requires an absolute path to a unit file. The effect of this can be undone with disable. The effect of this command is that a unit file is available for start and other commands although it is not installed directly in the unit search path.

    
por Tom17 22.03.2016 / 20:17

2 respostas

8

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 . A segunda possibilita que myservice seja iniciado automaticamente (o que, como aponta Julien, adiciona automaticamente o link ).

Eu acho que ... Eu tenho tentado envolver minha cabeça nisso o dia todo.

    
por 09.07.2016 / 22:57
7

Ao ativar um serviço a partir de outro caminho que não os caminhos 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:

  • você não pode ativar um arquivo de serviço que já é um link
  • verifique se o caminho está no mesmo disco montado. Se não estiver, o systemd não poderá carregar os arquivos da unidade de serviço na inicialização porque o disco não será montado ainda e os arquivos não serão encontrados. (consulte arquivos de unidade vinculados do Systemd no disco montado falha ao carregar )
  • devido a um erro no systemd, não é possível ativar instâncias de um arquivo de unidade que esteja em um caminho não padrão (consulte link )
por 14.02.2017 / 10:12

Tags