systemctl
systemctl controlla systemd, il gestore di servizi e di avvio della maggior parte delle distribuzioni moderne (Arch, Debian, Ubuntu, Fedora ecc.).
Sintassi
systemctl [opzioni] comando [unità]
Le unità sono servizi (.service), timer (.timer), socket (.socket), mount (.mount) e altro. Se non scrivi il suffisso, systemctl assume .service.
Per modificare lo stato dei servizi di sistema serve sudo.
Stato di un servizio
systemctl status nginx
Mostra se è attivo, da quando, il PID e le ultime righe di log.
Controlli rapidi, utili negli script:
systemctl is-active nginx
systemctl is-enabled nginx
systemctl is-failed nginx
Avviare, fermare, riavviare
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
restartferma e riavvia il servizio.reloadrilegge la configurazione senza interrompere il servizio, se il programma lo supporta.
Abilitare all'avvio
sudo systemctl enable nginx
sudo systemctl disable nginx
Avviare e abilitare con un solo comando:
sudo systemctl enable --now nginx
Disabilitare e fermare insieme:
sudo systemctl disable --now nginx
Mascherare un servizio
Impedisce che il servizio venga avviato, anche manualmente o come dipendenza:
sudo systemctl mask nome.service
sudo systemctl unmask nome.service
Elencare le unità
Servizi attivi:
systemctl list-units --type=service
Tutti i servizi, anche quelli inattivi:
systemctl list-units --type=service --all
Servizi in errore:
systemctl --failed
File di unità installati e relativo stato di abilitazione:
systemctl list-unit-files --type=service
Timer pianificati:
systemctl list-timers
Leggere e modificare un'unità
Vedere il file di unità completo:
systemctl cat nginx
Modificarlo senza toccare il file originale (crea un override in /etc/systemd/system/nginx.service.d/override.conf):
sudo systemctl edit nginx
Dopo qualsiasi modifica ai file di unità:
sudo systemctl daemon-reload
sudo systemctl restart nginx
Creare un servizio personalizzato
File /etc/systemd/system/mioscript.service:
[Unit]
Description=Il mio script
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=michele
ExecStart=/usr/bin/python3 /home/michele/script.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Attivarlo:
sudo systemctl daemon-reload
sudo systemctl enable --now mioscript.service
systemctl status mioscript.service
Servizi utente (senza root)
Ogni utente può avere servizi propri, in ~/.config/systemd/user/:
systemctl --user enable --now mioscript.service
systemctl --user status mioscript.service
journalctl --user -u mioscript.service
Per farli partire anche senza login:
sudo loginctl enable-linger $USER
Gestire il sistema
sudo systemctl reboot
sudo systemctl poweroff
sudo systemctl suspend
Vedere il target (runlevel) corrente e impostarlo:
systemctl get-default
sudo systemctl set-default multi-user.target
sudo systemctl set-default graphical.target
Diagnosi
Un servizio non parte:
systemctl status nome.service
journalctl -u nome.service -b -e
Quali servizi rallentano l'avvio:
systemd-analyze blame
systemd-analyze critical-chain
Reimpostare lo stato di errore di un'unità:
sudo systemctl reset-failed nome.service