Basi della gestione dei servizi: comandi systemctl
(avvio, arresto, riavvio dei servizi)
1. Cosa sono i servizi in Linux?
I servizi sono la base di qualsiasi moderna distribuzione Linux. Vuoi avviare il tuo server web con Nginx? Avvia e configura il servizio corrispondente. Vuoi che il database MySQL funzioni? Anche questo è un servizio. Anche il tuo amato cron
, che esegue ammirabili script bash, è un servizio. Gestire i servizi è una competenza che userai non solo al lavoro, ma anche per i tuoi progetti personali. Comunque, durante i colloqui, la domanda "E come fermeresti un servizio?" compare più spesso di quanto tu possa immaginare.
Definizione e ruolo
Un servizio in Linux è un programma che lavora in background (cioè come demone, dall'inglese "daemon"). Questi programmi possono essere avviati automaticamente all'avvio del sistema o manualmente quando necessario. Si occupano di svolgere compiti specifici, come:
- Gestione delle richieste web (ad esempio,
nginx
/apache
). - Supporto per l'accesso remoto (ad esempio,
openssh
). - Esecuzione di compiti pianificati (ad esempio,
cron
).
In sostanza, i servizi sono quei "cavalli da lavoro" che svolgono compiti invisibili all'utente, ma assolutamente critici per il funzionamento del sistema.
2. Basi della gestione dei servizi con systemctl
Cos'è systemctl
?
Iniziamo col dire che systemctl
è il comando principale per la gestione dei servizi nei sistemi che utilizzano systemd. Se il tuo sistema utilizza una moderna distribuzione Linux (per esempio, Ubuntu, Fedora o CentOS), molto probabilmente utilizza systemd
.
Funzioni principali
- Avvio di un servizio: avvia un servizio se è disabilitato.
- Arresto di un servizio: interrompe l'esecuzione di un servizio.
- Riavvio di un servizio: arresta e avvia nuovamente un servizio.
- Verifica dello stato: controlla lo stato corrente di un servizio.
Ecco la struttura base del comando:
sudo systemctl [azione] [nome_servizio]
Avvio e arresto di un servizio
Avvio:
Immagina di aver installato un web server nginx
e vuoi avviarlo. Per questo si usa il comando start
:
sudo systemctl start nginx
Arresto:
Ma cosa succede se vuoi disattivare temporaneamente il web server? Ti salverà il comando stop
:
sudo systemctl stop nginx
Riavvio di un servizio
Il riavvio è necessario per applicare modifiche alla configurazione o semplicemente "rinfrescare" il servizio (per così dire, dargli un caffè e ricordargli che deve lavorare). Usa il comando restart
:
sudo systemctl restart nginx
Verifica dello stato
Non sei sicuro se nginx
sta funzionando? Il comando status
ti fornirà tutte le informazioni di cui hai bisogno:
sudo systemctl status nginx
In uscita vedrai:
- Identificativo univoco del processo (PID).
- Orario di avvio.
- Log degli errori, se qualcosa è andato storto.
Esempio di output:
nginx.service - A high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-11-01 09:00:00 UTC; 10min ago
...
3. Avvio automatico dei servizi
Abilitazione dell'avvio automatico
Per fare in modo che un servizio si avvii automaticamente ogni volta che il sistema si avvia, usa:
sudo systemctl enable nginx
Disabilitazione dell'avvio automatico
Se invece vuoi che il servizio non si avvii più al boot:
sudo systemctl disable nginx
Un modo semplice per verificare se l'avvio automatico è abilitato:
systemctl is-enabled nginx
Pratica nella gestione dei servizi
Facciamo un esercizio pratico usando il servizio cron
come esempio.
Avvia il servizio
cron
:sudo systemctl start cron
Verifica se è in esecuzione:
sudo systemctl status cron
Assicurati che lo stato sia "active (running)".
Ferma il servizio
cron
:sudo systemctl stop cron
Verifica che lo stato sia cambiato in "inactive (dead)".
Riavvia il servizio
cron
:sudo systemctl restart cron
4. Differenze tra servizi attivi, disattivati e terminati con errori
I servizi possono avere stati diversi. Ecco i principali tipi:
- Active (running) — il servizio è attivo; tutto funziona correttamente.
- Inactive (dead) — il servizio è fermo.
- Failed — si è verificato un errore durante l'avvio, l'arresto o l'esecuzione del servizio.
Per trovare rapidamente tutti i servizi che si trovano in stato di errore, utilizza:
systemctl --failed
5. Errori tipici e ostacoli nascosti
Errore: Unit not found
Se hai ricevuto un messaggio del tipo:
Failed to start nginx.service: Unit nginx.service not found.
Questo potrebbe significare che il servizio necessario non è installato oppure il nome è stato indicato erroneamente. Controlla il nome corretto:
systemctl list-unit-files | grep nginx
Errore di permessi
Se ti sei dimenticato di eseguire il comando con i permessi di sudo
, molto probabilmente riceverai un rifiuto di accesso:
Permission denied
Ricorda sempre di aggiungere sudo
prima dei comandi systemctl
.
6. Applicazione nei progetti reali
La gestione dei servizi è qualcosa che userai in qualsiasi ruolo legato a Linux:
- DevOps: automazione e gestione di tutti i servizi di sistema.
- Amministrazione dei server: controllo dello stato dei web server, database e altri servizi.
- Sviluppo su Linux: devi capire come gestire i servizi che sono legati al tuo progetto (ad esempio, avviare i server di sviluppo).
Quindi, conoscere il comando systemctl
non è solo un’abilità astratta, ma uno strumento reale per il lavoro. Esempio: devi riavviare il web server dopo aver aggiornato il sito? Un solo comando sudo systemctl restart nginx
— e problema risolto!
GO TO FULL VERSION