Introduzione
Negli ultimi anni, le distribuzioni Linux hanno sempre più fatto la transizione da altri sistemi init a systemd
. Il set di strumenti systemd
fornisce un modello init rapido e flessibile per gestire un intero sistema dall’avvio in poi.
In questa guida, ti daremo una rapida panoramica dei comandi più importanti che vorrai conoscere per gestire un server abilitato a systemd
. Questi dovrebbero funzionare su qualsiasi server che implementi systemd
(qualsiasi versione di sistema operativo a partire da Ubuntu 15.04, Debian 8, CentOS 7, Fedora 15). Cominciamo.
Gestione Unità di Base
L’oggetto di base che systemd
gestisce e su cui agisce è un “unità”. Le unità possono essere di molti tipi, ma il tipo più comune è un “servizio” (indicato da un file unità che termina con .service
). Per gestire i servizi su un server abilitato a systemd
, il nostro principale strumento è il comando systemctl
.
Tutti i normali comandi del sistema init hanno azioni equivalenti con il comando systemctl
. Utilizzeremo l’unità nginx.service
per dimostrare (dovrai installare Nginx con il tuo gestore di pacchetti per ottenere questo file di servizio).
Ad esempio, possiamo avviare il servizio digitando:
Possiamo interromperlo nuovamente digitando:
Per riavviare il servizio, possiamo digitare:
Per tentare di ricaricare il servizio senza interrompere la funzionalità normale, possiamo digitare:
Abilitazione o Disabilitazione delle Unità
Per impostazione predefinita, la maggior parte dei file di unità di systemd
non viene avviata automaticamente all’avvio. Per configurare questa funzionalità, è necessario “abilitare” l’unità. Questo la collega a un determinato “target” di avvio, facendola scattare quando quel target viene avviato.
Per abilitare un servizio per l’avvio automatico all’avvio, digitare:
Se si desidera disabilitare nuovamente il servizio, digitare:
Ottenere una panoramica dello stato del sistema
C’è una grande quantità di informazioni che possiamo estrarre da un server systemd
per ottenere una panoramica dello stato del sistema.
Ad esempio, per ottenere tutti i file di unità che systemd
ha elencato come “attivi”, digitare (è possibile omettere effettivamente list-units
poiché questo è il comportamento predefinito di systemctl
):
Per elencare tutte le unità che systemd
ha caricato o tentato di caricare in memoria, incluso quelle che non sono attualmente attive, aggiungi l’interruttore --all
:
Per elencare tutte le unità installate nel sistema, incluso quelle che systemd
non ha provato a caricare in memoria, digita:
Visualizzazione delle Informazioni di Registro di Base
A systemd
component called journald
collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.
Per vedere tutte le voci di registro, a partire dalla voce più vecchia, digita:
Per impostazione predefinita, ciò ti mostrerà le voci dalle avviamenti precedenti e correnti se journald
è configurato per salvare i record di avvio precedenti. Alcune distribuzioni abilitano ciò per impostazione predefinita, mentre altre no (per abilitare questo, modifica il file /etc/systemd/journald.conf
e imposta l’opzione Storage=
su “persistent”, o crea la directory persistente digitando sudo mkdir -p /var/log/journal
).
Se desideri vedere solo le voci del giornale dall’avvio corrente, aggiungi il flag -b
:
Per vedere solo i messaggi del kernel, come quelli che sono tipicamente rappresentati da dmesg
, puoi utilizzare il flag -k
:
Di nuovo, puoi limitare questo solo all’avvio corrente aggiungendo il flag -b
:
Interrogazione delle unità e dei registri
Mentre i comandi sopra ti hanno dato accesso allo stato generale del sistema, puoi anche ottenere informazioni sullo stato delle singole unità.
Per visualizzare una panoramica dello stato attuale di un’unità, puoi utilizzare l’opzione status
con il comando systemctl
. Questo ti mostrerà se l’unità è attiva, informazioni sul processo e gli ultimi voci del giornale:
Per vedere tutte le voci del giornale per l’unità in questione, fornisci l’opzione -u
con il nome dell’unità al comando journalctl
:
Come sempre, puoi limitare le voci all’avvio corrente aggiungendo il flag -b
:
Ispezione delle unità e dei file di unità
A questo punto, sai come modificare lo stato di un’unità avviandola o arrestandola, e sai come visualizzare lo stato e le informazioni del giornale per avere un’idea di ciò che sta accadendo con il processo. Tuttavia, non abbiamo ancora visto come ispezionare altri aspetti delle unità e dei file di unità.
A unit file contains the parameters that systemd
uses to manage and run a unit. To see the full contents of a unit file, type:
Per vedere l’albero delle dipendenze di un’unità (quali unità systemd
cercherà di attivare quando avvia l’unità), digita:
Questo mostrerà le unità dipendenti, con le unità target
espanso ricorsivamente. Per espandere tutte le unità dipendenti in modo ricorsivo, passare il flag --all
:
Infine, per visualizzare i dettagli a basso livello delle impostazioni dell’unità nel sistema, è possibile utilizzare l’opzione show
:
Questo ti fornirà il valore di ciascun parametro gestito da systemd
.
Modifica dei file di unità
Se è necessario apportare una modifica a un file di unità, systemd
consente di apportare modifiche direttamente dal comando systemctl
in modo da non dover accedere alla posizione effettiva del disco.
Per aggiungere un frammento di file di unità, che può essere utilizzato per aggiungere o sovrascrivere impostazioni nel file di unità predefinito, chiamare semplicemente l’opzione edit
sull’unità:
Se si preferisce modificare l’intero contenuto del file di unità invece di creare un frammento, passare il flag --full
:
Dopo aver modificato un file di unità, è necessario ricaricare il processo systemd
stesso per applicare le modifiche:
Utilizzo dei target (Runlevel)
Un’altra funzione di un sistema di inizializzazione è quella di transitare il server stesso tra stati diversi. I sistemi di inizializzazione tradizionali li chiamano tipicamente “runlevel”, consentendo al sistema di essere in un solo runlevel in un dato momento.
In systemd
, vengono utilizzati invece “targets”. I targets sono fondamentalmente punti di sincronizzazione che il server può utilizzare per portare il server in uno stato specifico. I file di servizio e altre unità possono essere legati a un target e più targets possono essere attivi contemporaneamente.
Per vedere tutti i targets disponibili sul tuo sistema, digita:
Per visualizzare il target predefinito che systemd
cerca di raggiungere all’avvio (che a sua volta avvia tutti i file di unità che compongono l’albero delle dipendenze di quel target), digita:
Puoi cambiare il target predefinito che verrà utilizzato all’avvio utilizzando l’opzione set-default
:
Per vedere quali unità sono legate a un target, puoi digitare:
Puoi modificare lo stato del sistema per passare tra i targets con l’opzione isolate
. Questo fermerà tutte le unità non legate al target specificato. Assicurati che il target che stai isolando non fermi nessun servizio essenziale:
Arresto o Riavvio del Server
Per alcuni dei principali stati a cui un sistema può transitare, sono disponibili scorciatoie. Ad esempio, per spegnere il server, puoi digitare:
Se desideri riavviare il sistema, puoi farlo digitando:
È possibile avviare la modalità di salvataggio digitando:
Nota che la maggior parte dei sistemi operativi include alias tradizionali per queste operazioni in modo che tu possa semplicemente digitare sudo poweroff
o sudo reboot
senza il systemctl
. Tuttavia, ciò non è garantito per essere configurato su tutti i sistemi.
Passaggi successivi
A questo punto, dovresti conoscere le basi di come gestire un server che utilizza systemd
. Tuttavia, c’è molto altro da imparare man mano che crescono le tue esigenze. Di seguito ci sono dei collegamenti a guide con informazioni più approfondite su alcuni dei componenti che abbiamo discusso in questa guida:
- Come utilizzare Systemctl per gestire i servizi e le unità di Systemd
- Come utilizzare Journalctl per visualizzare e manipolare i log di Systemd
- Comprensione delle unità e dei file di unità di Systemd
Imparando come sfruttare i punti di forza del tuo sistema di inizializzazione, puoi controllare lo stato delle tue macchine e gestire più facilmente i tuoi servizi e processi.