- 1 1. Introduzione
- 2 2. Come Elencare i Servizi con systemctl
- 3 3. Gestione Base dei Servizi con systemctl
- 4 4. Opzioni Utili e Tecniche Avanzate per systemctl
- 5 5. Problemi Comuni e Soluzioni
- 6 6. Riepilogo
- 7 7. Domande Frequenti (FAQ)
- 7.1 Q1. Qual è la differenza tra i comandi systemctl e service?
- 7.2 Q2. Qual è la differenza tra list-units e list-unit-files?
- 7.3 Q3. Posso avviare un servizio in stato “static”?
- 7.4 Q4. Non riesco ad avviare un servizio mascherato. Cosa devo fare?
- 7.5 Q5. Esiste un’interfaccia grafica per elencare lo stato dei servizi?
- 7.6 Q6. Dove devo collocare i file unit personalizzati?
1. Introduzione
Quando si utilizza Linux, ci sono molte situazioni in cui potresti voler controllare lo stato dei servizi o elencare tutti i processi in esecuzione. In questi casi, il comando systemctl è estremamente utile.
Questo comando interfaccia con “systemd”, il sistema di inizializzazione e gestore dei servizi su Linux, fornendo una vasta gamma di funzionalità come il controllo dello stato dei servizi (unità), l’avvio, l’arresto, il riavvio e l’elenco dei servizi.
In particolare, quando si tratta di “elencare con systemctl”, puoi comprendere la struttura del tuo sistema da vari angoli—non solo i servizi attualmente attivi, ma anche quelli inattivi o i servizi impostati per l’avvio automatico.
Questa sezione delineerà brevemente le basi di cosa sia “systemctl” e spiegherà cosa imparerai in questo articolo.
Cos’è systemctl?
systemctl è lo strumento standard per controllare e verificare varie “unità” come servizi, target e punti di montaggio nelle distribuzioni Linux basate su systemd.
Ad esempio, lo usi per avviare o arrestare servizi come Apache (httpd) o SSH, o per elencare lo stato di questi servizi.
Relazione tra systemd e systemctl
systemd è il sistema principale per i processi di avvio e la gestione dei servizi su Linux, che sostituisce strumenti più vecchi come SysVinit e Upstart. systemctl è l’utilità da riga di comando che interagisce direttamente con systemd.
In altre parole, se systemd è il “controllore”, allora systemctl agisce come l’“operatore” che invia le istruzioni.
Cosa Imparerai in Questo Articolo
Questo articolo risponde alle seguenti domande comuni:
- Come posso elencare tutti i servizi attualmente in esecuzione?
- Come includo i servizi inattivi nell’elenco?
- Come controllo quali servizi sono abilitati per l’avvio automatico?
- Come leggo e interpreto i risultati?
Ogni esempio di comando e il suo output sono spiegati attentamente per i principianti, quindi sentiti libero di seguire fino alla fine.
2. Come Elencare i Servizi con systemctl
Nell’amministrazione di sistema Linux, comprendere rapidamente l’elenco dei servizi è essenziale. Con il comando systemctl, puoi visualizzare facilmente non solo i servizi attualmente attivi, ma anche quelli inattivi e quelli configurati per l’avvio automatico.
Qui spiegheremo tre prospettive principali per elencare i servizi:
- Elenco dei servizi attivi
- Elenco di tutti i servizi (inclusi quelli inattivi)
- Elenco dei file unità dei servizi (inclusi gli impostazioni di avvio)
2.1 Elencare i Servizi Attualmente Attivi
Per controllare quali servizi sono “in esecuzione” sul tuo sistema, usa questo comando base:
systemctl list-units --type=service
Questo comando visualizza un elenco dei servizi attualmente attivi (in esecuzione). L’output include le seguenti colonne:
| Column | Description |
|---|---|
| UNIT | Name of the service (e.g., ssh.service) |
| LOAD | Whether the unit file is loaded |
| ACTIVE | Service status (e.g., active, inactive, failed) |
| SUB | Detailed status (e.g., running, exited, dead) |
| DESCRIPTION | Brief description of the service |
Queste informazioni ti aiutano a comprendere, ad esempio, se nginx è attualmente in esecuzione o quali servizi sono attivi.
2.2 Elencare Tutti i Servizi, Inclusi Quelli Inattivi
Per impostazione predefinita, list-units mostra solo i servizi attualmente attivi. Per includere i servizi inattivi, aggiungi l’opzione --all:
systemctl list-units --type=service --all
Questa opzione ti permette di vedere i servizi nello stato “inattivo” o quelli che non sono mai stati avviati prima.
Se vuoi restringere ulteriormente i risultati, usa l’opzione --state= per filtrare per stato specifico:
systemctl list-units --type=service --state=inactive
Questo è utile quando vuoi controllare solo i servizi arrestati, ad esempio.
2.3 Elencare i File Unità dei Servizi
Se vuoi sapere non solo lo stato attuale ma anche quali servizi sono abilitati e impostati per l’avvio automatico, usa il seguente comando:
systemctl list-unit-files --type=service
Questo visualizza un elenco dei file unità dei servizi (file di configurazione) e ti permette di controllare il loro stato di abilitazione/disabilitazione (abilitato, disabilitato, ecc.).
| STATE Value | Description |
|---|---|
| enabled | Automatically enabled at boot |
| disabled | Not enabled at boot; must be started manually |
| static | Started as a dependency of other units; cannot be enabled/disabled directly |
| masked | Explicitly disabled and cannot be started (protected) |
Esaminare questo elenco ti aiuta a comprendere visivamente quali servizi si avviano all’avvio e se qualcuno è stato accidentalmente mascherato.
3. Gestione Base dei Servizi con systemctl
Il comando systemctl non solo controlla lo stato del servizio, ma permette anche di avviare, fermare, riavviare e abilitare o disabilitare i servizi. Ecco le operazioni di base frequentemente utilizzate nella gestione del sistema Linux.
Padroneggiare questi comandi è essenziale per la gestione quotidiana del server e la risoluzione dei problemi.
3.1 Avvio di un Servizio
Per avviare manualmente un servizio specifico, utilizzare il sottocomando start:
sudo systemctl start [service name]
Ad esempio, per avviare Apache (httpd):
sudo systemctl start httpd.service
Questo avvia il servizio immediatamente. Se si desidera che persista dopo il riavvio, utilizzare anche enable (spiegato di seguito).
3.2 Arresto di un Servizio
Per arrestare un servizio, utilizzare questo comando:
sudo systemctl stop [service name]
Esempio:
sudo systemctl stop sshd.service
Il servizio rimane arrestato fino a quando non lo si avvia esplicitamente di nuovo.
3.3 Riavvio di un Servizio
Per riavviare un servizio (ad esempio, dopo modifiche alla configurazione), utilizzare:
sudo systemctl restart [service name]
Esempio:
sudo systemctl restart nginx.service
Il riavvio arresta sempre e poi avvia il servizio, indipendentemente dal suo stato attuale.
3.4 Controllo dello Stato del Servizio
Per controllare lo stato dettagliato del servizio, utilizzare il sottocomando status:
systemctl status [service name]
Esempio:
systemctl status mysql.service
Questo mostra lo stato attivo corrente, l’ID del processo (PID), un riassunto dei log e altro—molto utile per la risoluzione dei problemi.
3.5 Abilitazione di un Servizio per l’Avvio Automatico
Per garantire che un servizio si avvii automaticamente all’avvio, utilizzare il sottocomando enable:
sudo systemctl enable [service name]
Esempio:
sudo systemctl enable docker.service
Ora, il servizio si avvierà automaticamente al prossimo avvio del sistema.
3.6 Disabilitazione di un Servizio dall’Avvio Automatico
Per disabilitare l’avvio automatico, utilizzare il comando disable:
sudo systemctl disable [service name]
Esempio:
sudo systemctl disable cups.service
Questo impedisce al servizio di avviarsi all’avvio.
3.7 Controllo se un Servizio è Abilitato
Per verificare se un servizio è abilitato (si avvia automaticamente), utilizzare is-enabled:
systemctl is-enabled [service name]
Output di esempio:
enabled
Questo indica rapidamente la politica di avvio del servizio.
4. Opzioni Utili e Tecniche Avanzate per systemctl
Il comando systemctl supporta non solo le operazioni di base di avvio/arresto, ma anche attività di gestione avanzate. Ecco alcune opzioni e tecniche convenienti che dovreste conoscere.
Sfruttare queste funzionalità può migliorare notevolmente l’efficienza nella gestione dei servizi Linux.
4.1 Elenco delle Dipendenze del Servizio
In Linux, alcuni servizi dipendono da altre unità (servizi, mount, target, ecc.). Per controllare le dipendenze, utilizzare list-dependencies:
systemctl list-dependencies [service name]
Esempio:
systemctl list-dependencies nginx.service
Questo comando mostra le unità correlate in formato ad albero—utile per analizzare l’ordine di avvio e le dipendenze indirette.
4.2 Visualizzazione del Contenuto del File Unit
Se si desidera controllare i dettagli della configurazione di un’unità, è possibile visualizzare il file unit effettivo:
systemctl cat [service name]
Esempio:
systemctl cat ssh.service
Questo mostra il percorso del file e il suo contenuto, permettendo di vedere rapidamente eventuali impostazioni personalizzate.

4.3 Ricaricamento dei File Unit
Se si modifica manualmente un file unit, utilizzare daemon-reload per applicare le modifiche:
sudo systemctl daemon-reexec
O, più comunemente:
sudo systemctl daemon-reload
Questo ricarica i file unit in systemd, in modo che le modifiche abbiano effetto. Se le impostazioni non sembrano applicarsi, provare prima questo comando.
4.4 Controllo dei Log del Servizio (Supplemento)
Sebbene non sia un comando systemctl in sé, journalctl è utile per controllare i log del servizio:
journalctl -u [service name]
Esempio:
journalctl -u docker.service
Questo permette di rivedere errori di avvio e cronologia dei riavvii—un passaggio essenziale per la risoluzione dei problemi.
5. Problemi Comuni e Soluzioni
Quando si gestiscono i servizi con systemctl, le cose non sempre vanno come previsto. Questa sezione spiega i problemi più comuni e come risolverli.
Preparati a “il servizio non si avvia” o “non riesci a trovare la causa” conoscendo questi passaggi base di risoluzione dei problemi.
5.1 Risoluzione dei problemi quando un servizio non si avvia
Potresti vedere errori come:
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
Per identificare la causa, controlla i seguenti passaggi in ordine:
- Controlla lo stato
systemctl status [service name]
- Controlla i log degli errori
journalctl -xe
- Ricarica i file di unità Se hai appena modificato un file di unità, ricaricalo con:
sudo systemctl daemon-reload
- Controlla i conflitti di porta Verifica se un altro processo sta già usando la porta:
sudo netstat -tulnp | grep [port number]
5.2 Come leggere i messaggi di errore nel comando status
Quando esegui systemctl status, vedi lo stato del servizio così come i messaggi di log più recenti. Per esempio:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
Active: failed (Result: exit-code) since Fri 2025-04-18 12:00:00 JST; 5s ago
Process: 12345 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
Questo ti permette di individuare rapidamente i fallimenti (ad es. “Active: failed”, “status=1/FAILURE”) e quale processo ha restituito un errore.
La riga Loaded mostra il percorso del file di unità, facilitando l’individuazione del file di configurazione da modificare.
5.3 Quando i servizi si arrestano in modo inatteso
Se un servizio si avvia ma poi si arresta immediatamente, le cause più comuni includono:
- Errori nei file di configurazione
- Conflitti di porta
- File o directory richiesti mancanti
- Permessi di esecuzione insufficienti
Per risolvere, prova quanto segue:
- Controlla e valida i file di configurazione (ad es.
nginx -toapachectl configtest) - Segui i log dettagliati con
journalctl -u [service name] - Assicurati che le directory richieste (ad es.
/var/run/xxx) esistano; creale se necessario
5.4 Impossibile avviare servizi in stato masked
Se vedi questo errore:
Failed to start example.service: Unit example.service is masked.
Il servizio è nello stato masked (completamente disabilitato e bloccato dall’avvio). Rimuovi il mask con:
sudo systemctl unmask [service name]
Poi potrai avviare il servizio come di consueto.
6. Riepilogo
La gestione dei servizi in Linux è una parte essenziale delle operazioni di sistema quotidiane. Il comando systemctl svolge un ruolo centrale, consentendoti di elencare i servizi e gestirli in modo efficiente.
Questo articolo ha spiegato i seguenti punti usando la parola chiave “systemctl list”:
Cosa puoi fare con il comando systemctl (Riepilogo)
- Controllare l’elenco dei servizi
- Visualizzare i servizi attivi (
list-units --type=service) - Elencare tutti i servizi, inclusi quelli inattivi ( opzioni
--allo--state=) - Mostrare i file di unità dei servizi e il loro stato di avvio (
list-unit-files) - Operazioni di base sui servizi
- Avviare, arrestare, riavviare e controllare lo stato (start / stop / restart / status)
- Abilitare/disabilitare l’avvio automatico (enable / disable / is-enabled)
- Operazioni avanzate e risoluzione dei problemi
- Controllare le dipendenze, visualizzare i file di unità, ricaricare le configurazioni
- Indagare gli errori usando i log e i controlli di stato
Best practice per la gestione dei servizi
- Controlla sempre lo stato prima di apportare modifiche (
statuscommand) - Conosci lo stato di avvio automatico (
is-enabledcommand) - Dopo aver apportato modifiche, esegui sempre
daemon-reload - Per i problemi, controlla i log con
journalctl
Controlli meticolosi come questi garantiscono una fornitura di servizi stabile e una risoluzione dei problemi più rapida nell’amministrazione di sistemi Linux.
Per approfondire
Se desideri imparare di più, considera di esplorare argomenti come:
- target di systemd (e differenze dai runlevel)
- Attività programmate con
systemd-timer - Come creare e gestire file unit personalizzati
7. Domande Frequenti (FAQ)
Questa sezione riassume le domande più frequenti e le risposte sul comando systemctl e sull’elenco dei servizi. Anche se sei a tuo agio con le basi, rivedile per un rapido riferimento.
Q1. Qual è la differenza tra i comandi systemctl e service?
A1.
systemctl è il comando di gestione dei servizi basato su systemd ed è lo standard per la maggior parte delle distribuzioni Linux moderne (Ubuntu, CentOS, Fedora, ecc.).
Al contrario, service proviene dal vecchio sistema SysVinit. Sebbene a volte sia mantenuto per compatibilità, si consiglia di usare systemctl negli ambienti systemd.
Q2. Qual è la differenza tra list-units e list-unit-files?
A2.
list-unitsmostra le unità attualmente caricate (attive o precedentemente usate).list-unit-fileselenca tutti i file unit e il loro stato di abilitazione/disabilitazione. È come la differenza tra “cosa è in esecuzione ora” e “cosa è configurato per essere eseguito”.
Q3. Posso avviare un servizio in stato “static”?
A3.
Sì, puoi avviare manualmente (start) un servizio in stato static, ma non puoi abilitarlo (enable) per l’avvio automatico. Questo perché i servizi statici sono progettati per essere avviati come dipendenze di altre unità.
Q4. Non riesco ad avviare un servizio mascherato. Cosa devo fare?
A4.
masked significa “completamente disabilitato”. Per rimuovere il mascheramento:
sudo systemctl unmask [service name]
Dopo di che, potrai avviarlo normalmente.
Q5. Esiste un’interfaccia grafica per elencare lo stato dei servizi?
A5.
A seconda della distribuzione, strumenti come gnome-system-monitor, KSysGuard o Cockpit possono consentire di verificare lo stato dei servizi tramite GUI. Tuttavia, per operazioni avanzate, systemctl rimane il metodo più affidabile.
Q6. Dove devo collocare i file unit personalizzati?
A6.
Di solito, posizionali in /etc/systemd/system/. Dopo la modifica, non dimenticare di eseguire:
sudo systemctl daemon-reload
Quindi gestiscili normalmente con start o enable.


