Como remover serviços systemd

181

Se eu instalar um novo serviço e decidir que não quero mais esse aplicativo e excluí-lo, o serviço ainda será listado na saída systemctlcomo erro .

De onde isso vem e como posso removê-los completamente?

emel
fonte

Respostas:

295

Minha receita para obliteração de serviço (tenha cuidado com as rmdeclarações!)

systemctl stop [servicename]
systemctl disable [servicename]
rm /etc/systemd/system/[servicename]
rm /etc/systemd/system/[servicename] symlinks that might be related
systemctl daemon-reload
systemctl reset-failed

É possível que o serviço systemd 'agrupe' os scripts de estilo antigo em /etc/init.d, portanto, você pode limpar isso também, mas não é aí que os serviços systemd estão.

Mark Lakata
fonte
7
Esteja ciente de que existem vários locais onde os arquivos da unidade Systemd são armazenados, principalmente /usr/lib/systemd/systeme também /etc/systemd/system/. Para referência ver: access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/...
Mark Edington
6
Eu também tive de remover /etc/init.d/[servicename]antes de executarsystemctl reset-failed
Andrea
4
Certo, esqueci de desativar antes de remover os arquivos da unidade. BTW, para encontrar todos os arquivos de unidades a serem removidos, inspeciono a saída de systemctl cat [servicename].
Amir
Pode ser um script de estilo antigo "empacotado" no /etc/init.d/, mas se você não removê-lo, ainda o verá aparecendo nos serviços restantes da sua remoção. Posso dizer que esse foi o meu caso. Você pode simplesmente adicioná-lo à sua resposta para torná-la mais completa, mas espero que a próxima pessoa que precise dela examine os comentários.
Marlon
1
Isso funcionou, obrigado, mas não sei por que fui feita para limpar esse lixo manualmente.
Rolf
25

Você provavelmente está procurando reset-failed:

$ sudo systemctl reset-failed
$

Na página de manual systemd:

reset-failed [PATTERN...]

Redefina o estado "com falha" das unidades especificadas ou, se nenhum nome de unidade for passado, redefina o estado de todas as unidades. Quando uma unidade falha de alguma forma (ou seja, processo saindo com código de erro diferente de zero, finalizando de forma anormal ou atingindo o tempo limite), ela entra automaticamente no estado "com falha" e seu código e status de saída são registrados para introspecção pelo administrador até o serviço é reiniciado ou redefinido com este comando.

Vebjorn Ljosa
fonte
2
Não é isso que a pergunta está pedindo. Por que diabos isso foi votado 17 vezes?
Psusi 7/11
1
Esta é a única resposta correta. Os outros com mais votos positivos e a marca de seleção são soluções alternativas.
Thomas
1
Não li a pergunta do OP, mas essa era a resposta que estava procurando.
CousinCocaine
23

Parece que você o desinstalou, mas não removeu o gancho systemd:

# systemctl disable [servicename]

nerdwaller
fonte
4

Adicionando à resposta de @ mark-lakata e tendo em mente a atenção necessária para o rmcomando. [chkconfig]pode simplificar o processo! ( clique aqui para ler sobre o chkconfig )

Para reiterar a lista de comandos:

  1. systemctl stop [servicename]
  2. chkconfig [servicename] off
  3. systemctl daemon-reload
  4. systemctl reset-failed

Nota: O 1º comando é opcional, dependendo se você deseja manter o serviço em execução na presente sessão ou não (quanto a esta pergunta, o comando deve ser usado).

O segundo comando cuida da desativação e remoção (seguindo os links simbólicos) do serviço.

alhoFrancium
fonte
1
chkconfigfoi o comando original para ativar / desativar os serviços SysVinit. Nos sistemas em uso systemd, ele pode estar presente como um comando de compatibilidade com versões anteriores; mas o systemctlcomando nativo é tão simples quanto:systemctl disable [servicename]
telcoM
1
Ok, mas a razão para me usar este comando é, então você não tem que executar explicitamente o comando rm
garlicFrancium
1

Removendo um serviço do systemd:

O Systemd usa a unidade (arquivo para definir serviços) para remover um serviço que a unidade precisa ser removida ... aqui está uma lista de locais da unidade:

/etc/systemd/system/ (and sub directories)
/usr/local/etc/systemd/system/ (and sub directories)
~/.config/systemd/user/ (and sub directories)
/usr/lib/systemd/ (and sub directories)
/usr/local/lib/systemd/ (and sub directories)
/etc/init.d/ (Converted old service system)

Atualizar systemd:

systemctl daemon-reload
systemctl reset-failed

Serviços fantasmas (não encontrados):

O Systemd pode listar serviços fantasmas (não encontrados), mesmo que a unidade seja excluída por vários motivos

  1. unidade ainda presente em um dos diretórios systemd
  2. unidade não sai, mas um link de arquivo ainda está presente em um dos diretórios systemd
  3. o serviço é usado em outras unidades *

(*) se um serviço for mencionado em outra unidade, mas não existir, o systemd ainda listará esse serviço com o estado não encontrado, mesmo que não haja um arquivo de unidade ... você pode pesquisar qual unidade está usando esse serviço com uma pesquisa de texto e edite essas unidades (não recomendado se você planeja instalar esse serviço posteriormente)

intika
fonte