10 Novembre 2023

Cos’è Systemd?

Systemd: lo standard nella gestione dei servizi Linux e la sua indispensabilità per gli amministratori di sistema.

Systemd

Systemd è un meccanismo di gestione e servizio, comunemente noto come “system daemon”. È diventato fondamentale in RHEL7 e versioni successive, assumendo la responsabilità di inizializzare e attivare risorse di sistema e daemon di server all’avvio e durante l’esecuzione del sistema. In parole semplici, systemd avvia e gestisce tutti i tipi di processi e servizi in Linux. Tecnicamente, è un programma inizializzatore che porta il sistema a uno stato definito attivando tutti i servizi e processi abilitati in quello stato, usando file di configurazione per conoscere quali servizi e processi sono abilitati in ogni stato.

Evoluzione dei sistemi di init fino a Systemd

Il systemd è il successore dei programmi inizializzatori SysVinit e Upstart. SysVinit, creato negli anni ’80 per i sistemi ‘UNIX System V’, è stato a lungo lo standard fino a RHEL5. Questo programma definiva sei stati di sistema, noti come livelli di esecuzione, e mappava tutti i processi e servizi a questi livelli. Tuttavia, SysVinit era pensato per un ambiente statico e non gestiva bene i dispositivi hot-plug, come le unità USB.

Upstart è stato sviluppato come sostituto di SysVinit per operare in un ambiente più flessibile. Offriva vantaggi come la gestione dei servizi basata su eventi, l’avvio asincrono dei servizi e il riavvio automatico dei servizi in crash. A differenza di SysVinit, Upstart non usava livelli di esecuzione, ma eventi di sistema per avviare e fermare i servizi.

SysVinit

La storia di SysVinit inizia negli anni ’80, quando fu introdotto per i sistemi ‘UNIX System V’. In quel periodo, rappresentava un grande passo avanti nella gestione dei sistemi operativi UNIX. SysVinit rimase lo standard per diversi sistemi operativi, inclusi quelli basati su Linux come Red Hat Enterprise Linux (RHEL) fino alla versione 5, rilasciata nel 2007. Il suo ruolo era di organizzare il processo di avvio del sistema in sei stati di sistema o livelli di esecuzione, ognuno dei quali rappresentava un diverso stato di operatività del sistema, da un avvio completo a uno stato di ripristino o manutenzione. Tuttavia, SysVinit aveva limitazioni significative: era progettato per un ambiente di sistema più statico e non gestiva efficacemente nuovi sviluppi come i dispositivi hot-plug.

Upstart

In risposta alle limitazioni di SysVinit, venne sviluppato Upstart, introdotto per la prima volta in Ubuntu nel 2006. Upstart era un tentativo di modernizzare il processo di avvio, introducendo concetti come la gestione dei servizi basata su eventi e l’avvio asincrono dei servizi. Questo significava che i servizi potevano essere avviati o fermati in risposta a eventi specifici, piuttosto che secondo un ordine prestabilito come in SysVinit. La capacità di Upstart di riavviare automaticamente i servizi in crash e di gestire meglio i dispositivi hot-plug rappresentava un netto miglioramento rispetto al suo predecessore. Tuttavia, anche Upstart aveva le sue limitazioni, in particolare nella gestione di complesse dipendenze tra servizi.

Systemd

Infine, systemd è emerso come il successore di Upstart e SysVinit. Sviluppato da Lennart Poettering e Kay Sievers di Red Hat, systemd è stato rilasciato per la prima volta nel 2010 e adottato da Fedora nel 2011. Rappresenta un cambiamento radicale nel modo in cui Linux gestisce il processo di avvio e la supervisione dei servizi. Systemd introduce un approccio più integrato e dinamico, gestendo non solo l’avvio dei servizi ma anche le sessioni utente, i mount point, i socket e altre risorse di sistema. Con funzionalità come l’avvio parallelo dei servizi, la risoluzione delle dipendenze, e una gestione avanzata tramite cgroups, systemd ha ridefinito l’efficienza e la flessibilità nella gestione dei sistemi Linux moderni.

Queste transizioni, da SysVinit a Upstart e poi a systemd, riflettono l’evoluzione continua dei sistemi operativi Linux e la ricerca di soluzioni sempre più efficienti e adatte alle esigenze di un ambiente in rapida evoluzione.

Caratteristiche e Vantaggi di Systemd

Systemd, il moderno programma inizializzatore, è utilizzato dalla maggior parte degli sviluppatori Linux, incluso RedHat (da versione 7) e Ubuntu (da versione 15.04). Questo sistema è più complesso e offre molte funzionalità e strumenti per gestire servizi, dispositivi, socket, punti di montaggio, aree di swap, tipi di unità, target e molto altro.

I vantaggi di systemd includono diverse caratteristiche significative:

  1. Avvio dei Servizi in Modalità Parallela: Systemd è in grado di avviare servizi simultaneamente invece di farlo in sequenza. Questo approccio parallelo riduce significativamente il tempo di avvio del sistema, migliorando le performance generali. Diversi servizi possono essere avviati contemporaneamente, a condizione che non abbiano dipendenze l’uno dall’altro, ottimizzando l’uso delle risorse del sistema.
  2. Risoluzione Automatica delle Dipendenze: Systemd gestisce in modo intelligente le dipendenze tra i vari servizi. Identifica e risolve automaticamente queste dipendenze, garantendo che i servizi vengano avviati nell’ordine corretto. Questo elimina la necessità di configurazioni manuali complesse, rendendo il processo di avvio più efficiente e meno soggetto a errori.
  3. Capacità di Riavviare Processi: Systemd ha la capacità di monitorare e riavviare automaticamente i servizi che si interrompono inaspettatamente. Questo garantisce una maggiore stabilità del sistema, poiché i servizi critici possono essere rapidamente ripristinati senza intervento umano, minimizzando i tempi di inattività.
  4. Tracciamento e Associazione di Processi tramite Gruppi di Controllo Linux (cgroups): Systemd utilizza i cgroups per organizzare e gestire i processi in modo efficiente. Questo permette di allocare risorse come CPU e memoria a specifici gruppi di processi, migliorando la gestione delle risorse e isolando i processi l’uno dall’altro, il che aumenta la sicurezza e la stabilità del sistema.
  5. Supporto per Hardware Moderno: Systemd offre un ampio supporto per hardware moderno, inclusi dispositivi hot-plug come unità USB e dischi esterni. Ciò significa che systemd è in grado di gestire dinamicamente questi dispositivi non appena vengono collegati o scollegati, migliorando l’usabilità e la flessibilità del sistema.
  6. Avvio di Daemon su Richiesta: Con systemd, i daemon possono essere avviati su richiesta, senza necessità di riavviare il servizio già in esecuzione. Questo è particolarmente utile per servizi che non devono essere eseguiti continuamente, ma solo quando necessario, riducendo così l’uso delle risorse del sistema.
  7. Creazione di Snapshot dello Stato di Sistema in Esecuzione: Systemd permette di creare snapshot dello stato attuale del sistema. Questi snapshot possono essere utilizzati per ripristinare lo stato del sistema a un punto precedente, una funzionalità utile in caso di errori o malfunzionamenti.
  8. Registrazione degli Eventi: Infine, systemd fornisce un meccanismo di registrazione avanzato, che permette di tracciare e analizzare tutti gli eventi relativi ai servizi e ai processi del sistema. Questo è fondamentale per il debugging e per mantenere il sistema sicuro e funzionante in modo ottimale.

Queste caratteristiche rendono systemd uno strumento versatile e potente per la gestione dei moderni sistemi operativi Linux, migliorando significativamente la gestione, la sicurezza e le prestazioni dei servizi e dei processi del sistema.

Il concetto di Unit in Systemd

In systemd, il concetto di “Unit” rappresenta uno dei pilastri fondamentali su cui si basa questa tecnologia. Una Unit in systemd è un oggetto che rappresenta un servizio, un processo, una risorsa o un punto di attivazione all’interno del sistema. Ogni Unit è descritta da un file di configurazione, che specifica come systemd deve gestire il servizio o la risorsa corrispondente. Questi file di configurazione sono chiari, strutturati e facilmente leggibili, e si trovano solitamente in /etc/systemd/system o in /lib/systemd/system.

system-unit

Le Unit in systemd sono categorizzate in diversi tipi, ognuno dei quali ha uno scopo specifico. I tipi più comuni includono:

  1. Service Units: Gestiscono i servizi di sistema, come server web o database. Sono identificati dai file con estensione .service.
  2. Socket Units: Utilizzati per la gestione dei socket di rete e IPC, consentono la comunicazione tra processi. Sono rappresentati dai file .socket.
  3. Device Units: Rappresentano dispositivi hardware e vengono creati dinamicamente in risposta a dispositivi hardware rilevati dal sistema. Sono identificati dai file .device.
  4. Mount Units: Gestiscono i punti di montaggio nel file system, corrispondenti ai file .mount.
  5. Target Units: Forniscono un meccanismo per raggruppare diverse Unit, facilitando la gestione di set complessi di dipendenze e l’avvio coordinato di servizi. I file .target rappresentano questi gruppi.

Ogni Unit può avere una serie di direttive che definiscono come essa debba comportarsi. Queste direttive possono includere, ad esempio, l’ordine in cui i servizi devono essere avviati, le dipendenze tra i vari servizi, o le azioni da intraprendere in caso di errore di un servizio. Il sistema systemd analizza questi file di configurazione all’avvio del sistema o quando un amministratore richiede di avviare, fermare o riavviare una Unit.

L’introduzione delle Unit in systemd ha semplificato notevolmente la gestione dei servizi e delle risorse in Linux, rendendo il processo più scalabile, gestibile e comprensibile. Questo approccio modulare e unitario permette agli amministratori di avere un controllo più granulare sul comportamento dei servizi e sulle relazioni tra di essi, portando a una gestione del sistema più efficiente e flessibile.

Systemd come watchdog al posto di supervisord

Systemd offre una funzionalità integrata di watchdog, che consente agli amministratori di sistema di utilizzarlo come alternativa a strumenti esterni come Supervisord per il monitoraggio e la gestione dei servizi. Il concetto di watchdog in systemd si basa sulla capacità di monitorare attivamente i servizi e i processi, riavviandoli automaticamente in caso di malfunzionamento o arresto imprevisto. Questo si traduce in una maggiore resilienza e stabilità del sistema.

La caratteristica principale di systemd come watchdog è la sua integrazione nativa con l’ecosistema Linux. A differenza di Supervisord, che richiede una configurazione e gestione separate, systemd è già parte integrante della maggior parte delle moderne distribuzioni Linux, offrendo una soluzione unificata per l’avvio, la supervisione e la gestione dei servizi.

Per utilizzare systemd come watchdog, gli amministratori possono sfruttare diverse direttive nei file di configurazione delle unità di servizio. Queste includono opzioni come Restart=, che definisce le condizioni e la frequenza con cui un servizio deve essere riavviato in caso di fallimento, e WatchdogSec=, che imposta un timer per il watchdog. Quando un servizio non segnala attività entro il tempo specificato da WatchdogSec=, systemd interviene automaticamente per tentare di ripristinare il servizio.

Questa funzionalità rende systemd non solo un inizializzatore di sistema, ma anche uno strumento potente per mantenere la stabilità e l’affidabilità dei servizi critici. Con systemd, gli amministratori possono configurare sistemi auto-riparanti, dove i servizi sono costantemente monitorati e mantenuti in uno stato funzionante senza la necessità di interventi manuali frequenti. In questo senso, systemd agisce come un sistema di salvaguardia incorporato, aumentando l’uptime del sistema e riducendo i potenziali downtime causati da crash o errori dei servizi.

Il Rifiuto Iniziale di Systemd da parte della comunità Linux

L’introduzione di systemd nel mondo Linux non è stata accolta unanimemente con entusiasmo. Al contrario, ha incontrato una resistenza significativa da parte di una porzione della comunità Linux. Questo rifiuto era in gran parte dovuto a preoccupazioni relative alla complessità e alla centralizzazione delle funzionalità che systemd introduceva, rompendo con il tradizionale approccio Unix di “fare una cosa e farla bene”. Alcuni utenti e sviluppatori hanno visto systemd come un’usurpazione dell’approccio tradizionale di Linux, con il suo sistema integrato che gestisce molti aspetti del sistema operativo, che in precedenza erano gestiti da una varietà di strumenti più piccoli e modulari. Inoltre, la rapida adozione di systemd da parte di molte delle principali distribuzioni Linux ha generato preoccupazioni sulla diminuzione della diversità e della scelta nel panorama Linux.

La Nascita di Devuan come Alternativa per i veterani.

In risposta al crescente dissenso nei confronti di systemd, è nata una nuova distribuzione Linux chiamata Devuan (di cui abbiamo parlato in questo articolo Devuan Linux: Alternativa Centrata sulla Libertà al Sistema Operativo Debian). Lanciata nel 2014, Devuan è emersa come una fork di Debian, una delle distribuzioni Linux più popolari, specificatamente per offrire un’alternativa senza systemd. L’obiettivo principale di Devuan era quello di mantenere l’eredità dell’inizializzazione tradizionale, offrendo agli utenti la libertà di scelta e un’esperienza meno complessa rispetto a systemd. Questa distribuzione ha attratto soprattutto gli utenti tradizionalisti di Linux, coloro che preferiscono l’approccio modulare e decentralizzato all’amministrazione del sistema. Devuan si è dimostrata particolarmente attraente per i neofiti di Linux, che cercano un sistema operativo semplice e meno intricato, e per coloro che desiderano avere un maggiore controllo manuale sui vari aspetti del loro sistema operativo.

Guida ai comandi da SysVinit a Systemd

La transizione da SysVinit a systemd ha portato a significativi cambiamenti nella gestione dei servizi e dei processi nei sistemi Linux. Per gli amministratori di sistema e gli utenti abituati ai comandi SysVinit, l’adattamento a systemd può sembrare inizialmente una sfida. Questa guida è progettata per facilitare questa transizione, fornendo una comparazione diretta tra i comandi SysVinit tradizionali e i loro equivalenti in systemd. Questo confronto aiuterà gli utenti a comprendere meglio come i comandi familiari siano stati trasformati e come possano essere utilizzati nel nuovo sistema. Di seguito è riportata una tabella che illustra la sintassi dei comandi SysVinit e i loro corrispettivi in systemd, facilitando l’aggiornamento delle competenze e la comprensione del nuovo paradigma di gestione dei sistemi.

Comandi Relativi ai Servizi

Commenti SysVinit Systemd
Avviare un servizio service dummy start systemctl start dummy.service
Fermare un servizio service dummy stop systemctl stop dummy.service
Riavviare un servizio service dummy restart systemctl restart dummy.service
Ricaricare un servizio service dummy reload systemctl reload dummy.service
Verificare lo stato di un servizio service dummy status systemctl status dummy.service
Avviare un servizio all’avvio se già in esecuzione service dummy condrestart systemctl try-restart dummy.service
Abilitare un servizio all’avvio chkconfig dummy on systemctl enable dummy.service
Disabilitare un servizio all’avvio chkconfig dummy off systemctl disable dummy.service
Verificare se un servizio è abilitato all’avvio chkconfig dummy systemctl is-enabled dummy.service
Creare un nuovo file di servizio o modificare la configurazione chkconfig dummy --add systemctl daemon-reload

Livelli di Esecuzione – Runlevels

Commenti SysVinit Systemd
Arresto del sistema 0 runlevel0.target, poweroff.target
Modalità utente singolo 1, s, single runlevel1.target, rescue.target
Multi utente 2 runlevel2.target, multi-user.target
Multi utente con Network 3 runlevel3.target, multi-user.target
Sperimentale 4 runlevel4.target, multi-user.target
Multi utente, con network, modalità grafica 5 runlevel5.target, graphical.target
Riavvio 6 runlevel6.target, reboot.target
Shell di emergenza emergency emergency.target
Cambiare al multi utente runlevel/target telinit 3 systemctl isolate multi-user.target (OR systemctl isolate runlevel3.target)
Impostare il target multi-utente al prossimo avvio sed -i 's/id:3:initdefault:/id:5:initdefault:/' /etc/inittab ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
Controllare il runlevel corrente runlevel systemctl get-default
Cambiare il runlevel predefinito sed -i 's/id:3:initdefault:/id:5:initdefault:/' /etc/inittab systemctl set-default multi-user.target

Comandi Vari

Commenti SysVinit Systemd
Arresto del sistema halt systemctl halt
Spegnimento del sistema poweroff systemctl poweroff
Riavvio del sistema reboot systemctl reboot
Sospensione del sistema pm-suspend systemctl suspend
Ibernazione pm-hibernate systemctl hibernate
Seguire il file di log del sistema tail -f /var/log/messages o tail -f /var/log/syslog journalctl -f

Nuovi Comandi di Systemd

Commenti Systemd
Eseguire un comando systemd su un host remoto systemctl -H user@host
Verificare il tempo di avvio systemd-analyze o systemd-analyze time
Uccidere tutti i processi relativi a un servizio systemctl kill dummy
Ottenere i log degli eventi di oggi journalctl --since=today
Hostname e altre informazioni relative all’host hostnamectl
Data e ora del sistema con timezone e altre informazioni timedatectl

Questa tabella non è esaustiva, ma copre i comandi più comunemente utilizzati, fornendo un riferimento pratico per gli utenti che passano da SysVinit a systemd. Con questa guida, l’obiettivo è rendere il processo di transizione il più fluido e intuitivo possibile.

Conclusione e consigli

Nel vasto mondo in continua evoluzione dei sistemi operativi Linux, Systemd non è solo una tendenza, ma una trasformazione fondamentale che ha ridefinito la gestione dei servizi e dei processi in Linux. Per gli amministratori di sistema, l’apprendimento e la padronanza di Systemd non sono più opzioni, ma necessità imprescindibili.

Il distacco dal vecchio sysvinit al più moderno e versatile Systemd non è solo un passaggio tecnologico, ma anche un salto qualitativo nelle competenze richieste ai professionisti IT. La maggior parte delle distribuzioni Linux moderne, da Debian a Fedora, da Ubuntu a CentOS, si affidano ora a Systemd per la gestione dei servizi. Questo sposta l’ago della bilancia da un sistema di init tradizionale, che molti hanno conosciuto e utilizzato per anni, a un ecosistema più complesso e potente, dove le competenze su Systemd diventano essenziali.

Imparare Systemd non è solo un investimento nel mantenimento della propria rilevanza professionale; è anche un’opportunità per esplorare nuove modalità di ottimizzazione delle prestazioni, gestione delle risorse e automazione in ambienti Linux.

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Facebook, Inc. detiene i diritti su Facebook®; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Questo sito non è affiliato, sponsorizzato, o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello Europeo da MANAGED SERVER SRL Via Enzo Ferrari, 9 62012 Civitanova Marche (MC) Italia.

Torna in alto