Essenziali di Systemd: Lavorare con servizi, unità e il registro

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:

  1. sudo systemctl start nginx.service

Possiamo interromperlo nuovamente digitando:

  1. sudo systemctl stop nginx.service

Per riavviare il servizio, possiamo digitare:

  1. sudo systemctl restart nginx.service

Per tentare di ricaricare il servizio senza interrompere la funzionalità normale, possiamo digitare:

  1. sudo systemctl reload nginx.service

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:

  1. sudo systemctl enable nginx.service

Se si desidera disabilitare nuovamente il servizio, digitare:

  1. sudo systemctl disable nginx.service

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):

  1. systemctl list-units

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:

  1. systemctl list-units --all

Per elencare tutte le unità installate nel sistema, incluso quelle che systemd non ha provato a caricare in memoria, digita:

  1. systemctl list-unit-files

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:

  1. journalctl

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:

  1. journalctl -b

Per vedere solo i messaggi del kernel, come quelli che sono tipicamente rappresentati da dmesg, puoi utilizzare il flag -k:

  1. journalctl -k

Di nuovo, puoi limitare questo solo all’avvio corrente aggiungendo il flag -b:

  1. journalctl -k -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:

  1. systemctl status nginx.service

Per vedere tutte le voci del giornale per l’unità in questione, fornisci l’opzione -u con il nome dell’unità al comando journalctl:

  1. journalctl -u nginx.service

Come sempre, puoi limitare le voci all’avvio corrente aggiungendo il flag -b:

  1. journalctl -b -u nginx.service

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:

  1. systemctl cat nginx.service

Per vedere l’albero delle dipendenze di un’unità (quali unità systemd cercherà di attivare quando avvia l’unità), digita:

  1. systemctl list-dependencies nginx.service

Questo mostrerà le unità dipendenti, con le unità target espanso ricorsivamente. Per espandere tutte le unità dipendenti in modo ricorsivo, passare il flag --all:

  1. systemctl list-dependencies --all nginx.service

Infine, per visualizzare i dettagli a basso livello delle impostazioni dell’unità nel sistema, è possibile utilizzare l’opzione show:

  1. systemctl show nginx.service

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à:

  1. sudo systemctl edit nginx.service

Se si preferisce modificare l’intero contenuto del file di unità invece di creare un frammento, passare il flag --full:

  1. sudo systemctl edit --full nginx.service

Dopo aver modificato un file di unità, è necessario ricaricare il processo systemd stesso per applicare le modifiche:

  1. sudo systemctl daemon-reload

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:

  1. systemctl list-unit-files --type=target

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:

  1. systemctl get-default

Puoi cambiare il target predefinito che verrà utilizzato all’avvio utilizzando l’opzione set-default:

  1. sudo systemctl set-default multi-user.target

Per vedere quali unità sono legate a un target, puoi digitare:

  1. systemctl list-dependencies multi-user.target

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:

  1. sudo systemctl isolate multi-user.target

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:

  1. sudo systemctl poweroff

Se desideri riavviare il sistema, puoi farlo digitando:

  1. sudo systemctl reboot

È possibile avviare la modalità di salvataggio digitando:

  1. sudo systemctl rescue

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:

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.

Source:
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal