Como desativar um serviço sem usar 'systemctl disable'

12

Há um serviço que quero executar apenas quando outro serviço falhar ( [Unit] OnFailure=foo), mas não quero que esse serviço ( foo) seja iniciado automaticamente na inicialização. Uma opção está em execução systemctl disable foo, mas estou procurando outro caminho.

Segundo plano: estou criando uma imagem do sistema operacional e não quero inicializar a máquina, execute esse comando ( systemctl disable foo) e desligue-o antes de declarar minha imagem final.

tshepang
fonte

Respostas:

4

Todos os serviços estão "desativados" por padrão; "ativação" é ativar.

Se foo.servicefor o seu serviço personalizado, ele não será iniciado, a menos que seja explicitamente atraído por algo (como a OnFailure=diretiva), e você não deve "desativar" nada.

intelfx
fonte
Então, basicamente, você "obtém essa funcionalidade gratuitamente", a menos que o foo tenha sido ativado anteriormente?
Rogerdpack
26

systemctl enablefunciona manipulando links simbólicos em /etc/systemd/system/(para daemons do sistema). Quando você é enableum serviço, ele analisa as WantedBylinhas da [Install]seção e abre links simbólicos nesses .wantsdiretórios.

systemctl disable faz o oposto.

Você pode simplesmente remover esses links simbólicos - fazer isso manualmente é totalmente equivalente ao uso systemctl disable.

derobert
fonte
Este seria um serviço que ainda não foi executado pelo systemd (é personalizado), portanto não haveria nenhum desses links simbólicos extras. Eu estou supondo que aqueles seriam criados na primeira inicialização?
tshepang
3
@Tshepang não deve ser ativado a menos que você ativá-lo manualmente (ou em um script, é claro)
derobert
1
Ah, eu assumi que seria ativado automaticamente (o que é algo que eu esperava ao instalar os pacotes Debian). Bom saber.
tshepang
3
@Tshepang, que é o script postinst no pacote, ativando. Ou eu acho que enviar os links simbólicos no pacote, não tenho certeza se eles fazem isso.
Derobert
4

Você pode usar systemctl start ServiceName.servicee systemctl stop Service.Name.servicepara iniciar e parar um serviço, respectivamente. Ao contrário de systemctl enable ...e systemctl disable ..., os comandos de início e parada duram apenas para a sessão atual; portanto, quando você reinicia a máquina, as alterações não serão salvas.

tshepang
fonte