Come elencare tutti i servizi in esecuzione da systemctl?

Pubblicato 27 agosto 2024

Problema: Visualizzare i Servizi Attivi in Linux

Gestire i servizi su un sistema Linux è un compito per amministratori e utenti. Systemctl, il comando principale per controllare systemd, offre un modo per gestire e monitorare questi servizi. Ottenere una panoramica di tutti i servizi in esecuzione può essere difficile senza conoscere i comandi e le opzioni giuste da utilizzare.

Elencare Tutti i Servizi in Esecuzione con Systemctl

Comando Base per Elencare i Servizi

Per elencare tutti i servizi gestiti da systemd, usa questo comando:

systemctl list-units --type=service

Questo comando mostra una tabella con informazioni su ogni unità di servizio. L'output include:

  • UNIT: Il nome dell'unità di servizio
  • LOAD: Se la definizione dell'unità è stata caricata
  • ACTIVE: Lo stato di attivazione di alto livello dell'unità
  • SUB: Lo stato di attivazione di basso livello dell'unità
  • DESCRIPTION: Una breve descrizione dello scopo dell'unità

Per mostrare solo i servizi attivi, aggiungi l'opzione --state=active:

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

Filtrare per Servizi in Esecuzione

Per elencare solo i servizi in esecuzione, usa:

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

Questo comando filtra i servizi inattivi o falliti, mostrando solo quelli in esecuzione sul tuo sistema.

Per una vista più compatta, usa l'opzione --no-pager:

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

Questo evita che l'output venga paginato, utile quando vuoi indirizzare i risultati ad altri comandi o file.

Per una rapida panoramica dei servizi in esecuzione senza dettagli extra, usa:

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

Questo comando rimuove le informazioni di intestazione e piè di pagina, fornendo un elenco pulito dei servizi in esecuzione.

Per contare il numero di servizi in esecuzione, indirizza l'output a wc:

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

Questo comando restituirà il numero totale di servizi in esecuzione sul tuo sistema.

Suggerimento: Ordina i servizi in esecuzione per utilizzo di memoria

Per capire quali servizi stanno utilizzando più risorse, puoi ordinare i servizi in esecuzione per utilizzo di memoria. Questo può aiutare gli amministratori di sistema a ottimizzare le prestazioni del sistema.

Ecco un comando per elencare i servizi in esecuzione ordinati per utilizzo di memoria:

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

Questo comando:

  1. Elenca tutti i servizi in esecuzione
  2. Estrae i nomi dei servizi
  3. Ottiene lo stato di ogni servizio
  4. Filtra per la riga di utilizzo della memoria
  5. Ordina i risultati per utilizzo di memoria (dal più alto al più basso)
  6. Mostra i primi 10 servizi che consumano più memoria

L'output apparirà così:

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

Comandi Systemctl Avanzati per la Gestione dei Servizi

Visualizzare Informazioni Dettagliate sui Servizi

Per ottenere più informazioni su un servizio, usa il comando systemctl status seguito dal nome del servizio:

systemctl status nome_servizio

Questo comando fornisce una panoramica del servizio, inclusi:

  • Stato corrente (attivo, inattivo, fallito)
  • PID principale (Process ID)
  • Utilizzo della memoria
  • Utilizzo della CPU
  • Ora di avvio
  • Voci di log recenti

Esempio: Visualizzare i Dettagli del Servizio SSH

systemctl status sshd

L'output include lo stato corrente del servizio, la posizione del file di configurazione e le voci di log recenti, utili per la risoluzione dei problemi.

Controllare lo Stato del Servizio

Per controllare lo stato di un servizio, usa:

systemctl is-active nome_servizio

Questo comando restituisce "active" se il servizio è in esecuzione, o "inactive" se non lo è.

Per controllare se un servizio si avvia all'avvio:

systemctl is-enabled nome_servizio

Questo restituisce "enabled" se il servizio si avvia automaticamente all'avvio, o "disabled" se non lo fa.

Puoi anche usare il comando systemctl show per ottenere proprietà specifiche di un servizio:

systemctl show -p ActiveState nome_servizio
systemctl show -p UnitFileState nome_servizio

Questi comandi mostrano lo stato attivo corrente e se il servizio è abilitato.

Per elencare tutti i servizi falliti:

systemctl --failed --type=service

Questo comando aiuta a identificare i servizi che hanno problemi e potrebbero richiedere attenzione.

Metodi Alternativi per Elencare i Servizi

Utilizzo del Comando PS

Il comando ps offre un altro modo per elencare i servizi in esecuzione in Linux. Sebbene non sia dettagliato come systemctl, può fornire una vista rapida dei processi attivi, inclusi i servizi.

Per elencare tutti i processi in esecuzione, inclusi i servizi:

ps aux

Questo comando mostra tutti i processi per tutti gli utenti in un formato dettagliato. Per filtrare servizi specifici, puoi usare grep:

ps aux | grep nome_servizio

Per una vista focalizzata sui servizi, puoi usare:

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

Questo comando visualizza l'ID del processo, l'ID del processo genitore, il comando, l'utilizzo della memoria e della CPU, ordinati per utilizzo della memoria.

Rispetto a systemctl, ps fornisce:

  • Informazioni sui processi in tempo reale
  • Dati più dettagliati sull'utilizzo delle risorse
  • La capacità di vedere processi non gestiti da systemd

Tuttavia, manca di informazioni specifiche di systemd come stati dei servizi e dipendenze.

Suggerimento: Output PS Personalizzato

Puoi personalizzare l'output di ps per mostrare solo le informazioni di cui hai bisogno. Ad esempio, per visualizzare solo il PID, il nome del comando e l'utilizzo della memoria dei processi, usa:

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

Questo comando ordina i processi per utilizzo della memoria e mostra i primi 10 processi che consumano più memoria.

Utilizzo del Comando Top

Il comando top fornisce una vista dinamica e in tempo reale dei processi in esecuzione, inclusi i servizi. Per usare top:

top

Questo apre un display interattivo che mostra:

  • Riepilogo del sistema (uptime, carico medio, utilizzo della CPU)
  • Elenco dei processi (ordinato per default per utilizzo della CPU)

Per concentrarsi sui servizi, puoi usare:

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

Questo comando mostra solo i processi relativi al servizio specificato.

Vantaggi dell'uso di top:

  • Aggiornamenti in tempo reale delle informazioni di sistema e dei processi
  • Interfaccia interattiva per ordinare e filtrare
  • Capacità di vedere le tendenze di utilizzo delle risorse nel tempo

I limiti includono:

  • Meno informazioni specifiche sui servizi rispetto a systemctl
  • Potrebbe richiedere più risorse di sistema per il monitoraggio continuo

Sia ps che top completano systemctl fornendo viste diverse sui servizi e processi in esecuzione, permettendo una migliore comprensione dell'attività del sistema.

Esempio: Monitoraggio del Server Web Apache

Per monitorare il server web Apache usando top, puoi usare:

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

Questo comando mostrerà informazioni in tempo reale su tutti i processi Apache, incluso il loro utilizzo di CPU e memoria. È utile per tracciare il consumo di risorse di Apache durante periodi di alto traffico.