CodeGym /Corsi /Docker SELF /Basi della gestione dei servizi: comandi systemctl (avvio...

Basi della gestione dei servizi: comandi systemctl (avvio, arresto, riavvio dei servizi)

Docker SELF
Livello 3 , Lezione 0
Disponibile

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

  1. Avvio di un servizio: avvia un servizio se è disabilitato.
  2. Arresto di un servizio: interrompe l'esecuzione di un servizio.
  3. Riavvio di un servizio: arresta e avvia nuovamente un servizio.
  4. 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.

  1. Avvia il servizio cron:

    sudo systemctl start cron
    
  2. Verifica se è in esecuzione:

    sudo systemctl status cron
    

    Assicurati che lo stato sia "active (running)".

  3. Ferma il servizio cron:

    sudo systemctl stop cron
    

    Verifica che lo stato sia cambiato in "inactive (dead)".

  4. 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:

  1. Active (running) — il servizio è attivo; tutto funziona correttamente.
  2. Inactive (dead) — il servizio è fermo.
  3. 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!

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION