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 cronVerifica se è in esecuzione:
sudo systemctl status cronAssicurati che lo stato sia "active (running)".
Ferma il servizio
cron:sudo systemctl stop cronVerifica 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