Como listar todos os serviços ativados do systemctl?

279

Como posso listar todos os enabledserviços systemctl?

Eu sei que executar o systemctlcomando por si só lista todos os serviços, mas gostaria de obter apenas enabledos.

oceanBT
fonte
o que você quer dizer com ativado? Você quer dizer serviços em execução?
Gen
7
A @Gen habilitar um serviço é bem diferente de iniciá-lo. Veja man systemctl.
285
Fascinante. A resposta com classificação mais baixa é a resposta mais "correta", mesmo que claramente não seja a melhor resposta. Esta excelente pergunta (e suas respostas) é um exemplo interessante de como o systemd viola os princípios de design de longa data (e brilhantes) da Unix & Co. @FelipeAlvarez reclama que a resposta mais aceita assume que systemd segue a filosofia do design unix, mas systemd / systemctl pode fazer exatamente o que ele quer (os usuários mais experientes considerarão esse inchaço completo). Começo a ver mais claramente por que Linus Torvalds é tão veementemente crítico do systemd.
BISI

Respostas:

411

systemctl list-unit-files | grep enabledlistará todos os habilitados .

Se você deseja quais estão em execução no momento , é necessário systemctl | grep running.

Use o que você está procurando. Habilitado, não significa que está em execução. E correr não significa que está ativado. São duas coisas diferentes.

Ativado significa que o sistema executará o serviço na próxima inicialização. Portanto, se você habilitar um serviço, ainda precisará iniciá-lo manualmente ou reiniciar e ele será iniciado.

Executar significa que está realmente em execução no momento, mas se não estiver ativado, não será reiniciado quando você reiniciar.

Dorian
fonte
5
irritante ter que usar uma ferramenta externa (grep) para mostrar essas informações vitais. Mas obrigado por nos mostrar o caminho :)
Felipe Alvarez
34
@FelipeAlvarez Correto. Mas é assim que o Linux funciona. Muitos binários pequenos que funcionam bem entre si. systemctl faz o que é pedido, lista serviços. Não há nenhum comando de filtragem embutido no systemctl porque o grep já existe e pode fazer isso bem com a saída de qualquer programa. É como sempre foi :) #
Dorian
3
Eu concordo e assim deve ser. Mas, o systemd já tenta fazer tanto que me pergunto por que não pode listar serviços ativados?
Felipe Alvarez
5
systemctl | grep runningnão liste nada para mim! Mesmo se algo está funcionando só é listado como por seu status como:enabled, disabled, masked, static
Cirelli94
27
Mais simples:systemctl list-unit-files --state=running
Será
93

man systemctl afirma:

--state=

O argumento deve ser uma lista separada por vírgulas de unidade LOAD, SUBou ACTIVEestados. Ao listar unidades, mostre apenas aquelas nos estados especificados. Use --state=failedpara mostrar apenas unidades com falha.

Explicação:

LOAD: Reflete se a definição da unidade foi carregada corretamente.
ACTIVE: O estado de ativação da unidade de alto nível, ou seja, generalização de SUB.
SUB: O estado de ativação da unidade de baixo nível, os valores dependem do tipo de unidade.

Embora você também possa usar isso para mostrar apenas enabledunidades com:

systemctl list-unit-files --state=enabled

Se for uma unidade, enabledsignifica que o sistema a iniciará na inicialização. Embora definir algo como enabledrealmente não o faça start, você precisará fazer isso manualmente ou reiniciar o sistema depois de configurá-lo enabled.

Martin Thornton
fonte
5
Para ativar e iniciar ao mesmo tempo:systemctl enable --now ...
Aurélien Ooms
1
--state=enablednão tem efeito na versão systemd 215 (no Raspbian 8 Jessie), mas funciona na versão 229 systemd (no Ubuntu 16.04.03 Xenial).
Mp4
@mpb: Mas ainda funciona perfeitamente na versão 235 no Arch Linux.
64

Para listar todos os systemdserviços que estão state=activeesub=running

systemctl list-units --type=service --state=running

Para listar todos os systemdserviços que estão dentro state=activee abaixo, executando ou saindo

systemctl list-units --type=service --state=active
Ankit Kumar Honey
fonte
12

Para ver os serviços 'ativados', incluindo os que ainda estão em execução inicial / inicial:

systemctl list-unit-files --type service --state enabled,generated

Para ver todos os serviços atualmente em execução, execute:

systemctl list-units --type service --state running
nix-power
fonte
Infelizmente os nomes dos serviços pode ser diferente nas duas listas - por exemplo, sshdcontra sshe syslogcontra rsyslog.
OrangeDog 11/01
A única resposta correta "não grep". Apesar de não ser certo porque arrivista é mencionado ...
rogerdpack
2

Também visão geral de todos os serviços ativos e com falha:

systemctl list-units --type service --state running,failed
panticz.de
fonte