Linux systemctl: Controllare e Gestire i Servizi

systemctl è un comando per controllare lo stato dei servizi e di altre unità gestite da systemd, avviarli o fermarli e impostare se sono abilitati all'avvio. Lo stato di esecuzione corrente e lo stato di abilitazione all'avvio sono diversi, quindi ciascuno deve essere controllato separatamente.

Prima di Avviare

systemd è il gestore di sistema e dei servizi per Linux, e le unità che gestisce includono non solo i servizi (.service) ma anche timer e socket. Questo articolo spiega come gestire i servizi di sistema su Linux usando systemd. Non può essere utilizzato così com'è in ambienti con altri sistemi di inizializzazione o dove systemd non è in esecuzione. Per comandi dettagliati, fare riferimento al manuale ufficiale di systemctl.

Il seguente apache2.service è un esempio quando Apache è installato su Ubuntu. Se non è installato, l'unità non può essere trovata e il nome può variare a seconda della distribuzione. Prima di esercitarsi, controllare il nome effettivo del servizio e, poiché fermare un server web operativo o un servizio di accesso remoto può interrompere la connessione, utilizzare un ambiente di test sicuro. Verificare lo stato è spesso possibile come utente normale, ma modificare i servizi di sistema di solito richiede privilegi di amministratore.

Verifica dello stato e del nome del servizio

Controllare separatamente i servizi attualmente caricati e i file delle unità di servizio installate. Le due liste hanno criteri differenti, quindi i risultati potrebbero non essere gli stessi.

systemctl list-units --type=service --all
systemctl list-unit-files --type=service

Il primo mostra i servizi caricati in systemd, comprese le unità inattive. Il secondo mostra i file unità di servizio installati e il loro stato di abilitazione, utile anche per trovare servizi che non sono ancora stati caricati. Se l'elenco è lungo e si apre il pager, premere q per uscire.

Ad esempio, per controllare lo stato e i log recenti del servizio Apache, inserire quanto segue.

systemctl status apache2.service
systemctl is-active apache2.service
systemctl is-enabled apache2.service

Nell'output di status, Active: active (running) significa che il servizio è attualmente in esecuzione, inactive significa inattivo e failed significa fallito. Gli stati dettagliati variano a seconda del tipo di servizio. is-active controlla lo stato corrente e is-enabled controlla lo stato di abilitazione. Le unità static non possono essere abilitate nel modo usuale ma possono essere avviate da altre unità.

Avvio, arresto, riavvio del servizio

I seguenti comandi modificano effettivamente lo stato del servizio. Sostituire il nome del servizio di esempio con quello appropriato per il tuo sistema e assicurarsi che interrompere il servizio sia accettabile prima di eseguire.

sudo systemctl start apache2.service
sudo systemctl stop apache2.service
sudo systemctl restart apache2.service

start avvia il servizio, e stop lo arresta. restart arresta il servizio e poi lo riavvia, e può avviare un servizio fermo. Eseguire solo il comando necessario. Dopo ogni operazione, verificare il risultato con systemctl status apache2.service. Anche per i servizi già in esecuzione, le connessioni possono essere temporaneamente interrotte durante un riavvio.

Se il servizio supporta il ricaricamento delle proprie impostazioni, è possibile riapplicare le impostazioni con sudo systemctl reload apache2.service. Il supporto e il metodo di applicazione variano per ogni servizio. Ricaricare e riavviare non sono la stessa azione, e il modo per controllare le impostazioni dovrebbe seguire la documentazione del servizio.

Attivazione all'avvio e stato di esecuzione corrente

I comandi seguenti configurano o rimuovono la connessione in modo che le unità si avviino durante il processo di avvio, ecc. Eseguire solo enable non avvia immediatamente nulla, ed eseguire solo disable non arresta immediatamente i servizi già in esecuzione.

sudo systemctl enable apache2.service
sudo systemctl disable apache2.service
systemctl is-enabled apache2.service

Seleziona ed esegui solo i comandi necessari e controlla i risultati con l'ultimo comando. enabled indica abilitato e disabled indica disabilitato. Tuttavia, i servizi possono comunque avviarsi a causa di dipendenze da altre unità o socket/timer, quindi non interpretare disable come blocco di tutti i percorsi di avvio.

Per attivare e avviare immediatamente, usa sudo systemctl enable --now apache2.service; per disattivare e fermare immediatamente, usa sudo systemctl disable --now apache2.service. Controlla gli effetti di ciascun comando e pratica solo in un ambiente di test.

Cosa Controllare Quando Si Verificano Problemi

Controlla l'elenco delle unità non riuscite e i log recenti dei servizi specifici. I log possono contenere informazioni sensibili, quindi verifica i contenuti prima di condividerli.

systemctl --failed
sudo journalctl -u apache2.service -n 50 --no-pager

Se il servizio non può essere trovato, controlla il suo nome e se è installato. Se l'avvio fallisce, controlla status e i log per errori di configurazione, servizi dipendenti, conflitti di porta o problemi di permessi. Lo stato masked indica che l'avvio è bloccato, quindi non rimuovere il mascheramento senza averne identificato la causa. I messaggi e le soluzioni possono variare a seconda della distribuzione e delle impostazioni del servizio.

Se hai cambiato il file unità

Se hai modificato il file unità di systemd o la configurazione drop-in, utilizza il seguente comando per far rileggere a systemd le definizioni delle unità.

sudo systemctl daemon-reload

Questo comando non riavvia il servizio stesso né fa ricaricare al servizio i propri file di configurazione. Se è necessario applicare le modifiche a un servizio in esecuzione, potrebbe essere richiesto un riavvio o un ricaricamento separato adatto al servizio e alle modifiche. Eseguire un backup della configurazione prima di apportare modifiche e assicurarsi di sapere come tornare allo stato originale.