Como listar todos os serviços em execução a partir do Systemctl?

Publicado 27 de agosto de 2024

Problema: Visualizando Serviços Ativos no Linux

Gerenciar serviços em um sistema Linux é uma tarefa para administradores e usuários. O Systemctl, o principal comando para controlar o systemd, oferece uma maneira de gerenciar e monitorar esses serviços. Obter uma visão geral de todos os serviços em execução pode ser difícil sem conhecer os comandos e opções corretos a serem usados.

Listando Todos os Serviços em Execução com o Systemctl

Comando Básico para Listar Serviços

Para listar todos os serviços gerenciados pelo systemd, use este comando:

systemctl list-units --type=service

Este comando mostra uma tabela com informações sobre cada unidade de serviço. A saída inclui:

  • UNIT: O nome da unidade de serviço
  • LOAD: Se a definição da unidade foi carregada
  • ACTIVE: O estado de ativação de alto nível da unidade
  • SUB: O estado de ativação de baixo nível da unidade
  • DESCRIPTION: Uma breve descrição do propósito da unidade

Para mostrar apenas serviços ativos, adicione a opção --state=active:

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

Filtrando Serviços em Execução

Para listar apenas os serviços que estão em execução, use:

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

Este comando filtra serviços inativos ou falhos, mostrando apenas aqueles em execução no seu sistema.

Para uma visualização mais compacta, use a opção --no-pager:

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

Isso evita que a saída seja paginada, o que é útil quando você deseja canalizar os resultados para outros comandos ou arquivos.

Para uma visão geral rápida dos serviços em execução sem detalhes extras, use:

systemctl list-units --type=service --state=running --plain --no-legend

Este comando remove as informações de cabeçalho e rodapé, fornecendo uma lista limpa de serviços em execução.

Para contar o número de serviços em execução, canalize a saída para wc:

systemctl list-units --type=service --state=running --plain --no-legend | wc -l

Este comando retornará o número total de serviços em execução no seu sistema.

Dica: Classificar serviços em execução por uso de memória

Para entender quais serviços estão usando mais recursos, você pode classificar os serviços em execução por uso de memória. Isso pode ajudar os administradores de sistema a otimizar o desempenho do sistema.

Aqui está um comando para listar serviços em execução classificados por uso de memória:

systemctl list-units --type=service --state=running --no-pager | awk '{print $1}' | xargs -I {} systemctl status {} | grep Memory | sort -rnk 3 | head -n 10

Este comando:

  1. Lista todos os serviços em execução
  2. Extrai os nomes dos serviços
  3. Obtém o status de cada serviço
  4. Filtra pela linha de uso de Memória
  5. Classifica os resultados por uso de memória (do mais alto para o mais baixo)
  6. Mostra os 10 principais serviços que consomem memória

A saída será parecida com isso:

Memory: 1.2G
Memory: 800.5M
Memory: 456.3M
Memory: 234.1M
Memory: 189.7M
Memory: 156.2M
Memory: 98.4M
Memory: 76.9M
Memory: 54.3M
Memory: 43.8M

Comandos Avançados do Systemctl para Gerenciamento de Serviços

Visualizando Informações Detalhadas do Serviço

Para obter mais informações sobre um serviço, use o comando systemctl status seguido pelo nome do serviço:

systemctl status nome_do_serviço

Este comando fornece uma visão geral do serviço, incluindo:

  • Estado atual (ativo, inativo, falho)
  • PID principal (ID do Processo)
  • Uso de memória
  • Uso de CPU
  • Hora de início
  • Entradas de log recentes

Exemplo: Visualizando Detalhes do Serviço SSH

systemctl status sshd

A saída inclui o status atual do serviço, localização do arquivo de configuração e entradas de log recentes, que ajudam na solução de problemas.

Verificando o Status do Serviço

Para verificar o status de um serviço, use:

systemctl is-active nome_do_serviço

Este comando retorna "active" se o serviço estiver em execução, ou "inactive" se não estiver.

Para verificar se um serviço inicia na inicialização:

systemctl is-enabled nome_do_serviço

Isso retorna "enabled" se o serviço iniciar automaticamente na inicialização, ou "disabled" se não iniciar.

Você também pode usar o comando systemctl show para obter propriedades específicas de um serviço:

systemctl show -p ActiveState nome_do_serviço
systemctl show -p UnitFileState nome_do_serviço

Esses comandos exibem o estado ativo atual e se o serviço está habilitado.

Para listar todos os serviços com falha:

systemctl --failed --type=service

Este comando ajuda a identificar serviços que têm problemas e podem precisar de atenção.

Métodos Alternativos para Listar Serviços

Usando o Comando PS

O comando ps oferece outra maneira de listar serviços em execução no Linux. Embora não seja tão detalhado quanto o systemctl, ele pode fornecer uma visão rápida dos processos ativos, incluindo serviços.

Para listar todos os processos em execução, incluindo serviços:

ps aux

Este comando mostra todos os processos para todos os usuários em um formato detalhado. Para filtrar serviços específicos, você pode usar o grep:

ps aux | grep nome_do_serviço

Para uma visão focada nos serviços, você pode usar:

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

Este comando exibe o ID do processo, ID do processo pai, comando, uso de memória e uso de CPU, classificados por uso de memória.

Comparado ao systemctl, o ps fornece:

  • Informações de processo em tempo real
  • Dados de uso de recursos mais detalhados
  • A capacidade de ver processos não gerenciados pelo systemd

No entanto, falta informações específicas do systemd, como estados de serviço e dependências.

Dica: Saída Personalizada do PS

Você pode personalizar a saída do ps para mostrar apenas as informações que você precisa. Por exemplo, para exibir apenas o PID, nome do comando e uso de memória dos processos, use:

ps -eo pid,comm,%mem --sort=-%mem | head

Este comando classifica os processos por uso de memória e mostra os 10 principais processos que consomem memória.

Usando o Comando Top

O comando top fornece uma visão dinâmica e em tempo real dos processos em execução, incluindo serviços. Para usar o top:

top

Isso abre uma exibição interativa mostrando:

  • Resumo do sistema (tempo de atividade, carga média, uso da CPU)
  • Lista de processos (classificada por uso de CPU por padrão)

Para focar em serviços, você pode usar:

top -c -p $(pgrep -d',' -f nome_do_serviço)

Este comando mostra apenas os processos relacionados ao serviço especificado.

Vantagens de usar o top:

  • Atualizações em tempo real das informações do sistema e dos processos
  • Interface interativa para classificação e filtragem
  • Capacidade de ver tendências de uso de recursos ao longo do tempo

As limitações incluem:

  • Menos informações específicas de serviço em comparação com o systemctl
  • Pode exigir mais recursos do sistema para monitoramento contínuo

Tanto o ps quanto o top complementam o systemctl fornecendo diferentes visões sobre serviços e processos em execução, permitindo uma melhor compreensão da atividade do sistema.

Exemplo: Monitorando o Servidor Web Apache

Para monitorar o servidor web Apache usando o top, você pode usar:

top -c -p $(pgrep -d',' -f apache2)

Este comando exibirá informações em tempo real sobre todos os processos Apache, incluindo seu uso de CPU e memória. É útil para rastrear o consumo de recursos do Apache durante períodos de alto tráfego.