systemd

Última actualització: agost de 2019

Cap al 2014 systemd va arribar a Debian i ara mateix el fan servir gairebé totes les distribucions derivades de Debian.

La documentació oficial diu que "systemd és un sistema i administrador de serveis per a Linux, compatible amb scripts d'inici (init) SysV i LSB. systemd proporciona capacitats de paral·lelització agressives, utilitza socket i activació D-Bus per iniciar els serveis, ofereix la posada en marxa de dimonis sota demanda, realitza el seguiment de processos utilitzant Linux cgroups, suporta còpia instantània de volum i la restauració d'estat del sistema , manté punts de muntatge i automuntatge i implementa un elaborat servei lògic de control transaccional basat en la dependència. Pot funcionar com un reemplaçament per sysvinit".

En altres paraules, systemd va substituir a init com a dimoni "pare" de tots els processos, el que vol dir que pren el control des del primer moment ja que tots els processos en execució penjen d'ell. A partir de que arrenca, systemd controla tot el que passa al sistema. El mateix que el fa interessant (controlar i gestionar tot el sistema) el fa "perillós" des del punt de vista de que tenim tots els ous a la cistella de systemd.

systemd treballa amb "units". Units son, per exemple: services (.service), mount points (.mount), devices (.device) or sockets (.socket).

Nom de les units

*serveis: s'anomenen .service, per exemple ntpd.service. Ens podem estalviar el punt .service final i el sistema el posarà per nosaltres. P.e. systemctl enable ntpd és el mateix que dir: systemctl enable ntpd.service

    • punts de muntatge: si volem muntar /home, ho farem amb el nom home.mount
    • dispositius: el dispositiu /dev/sda1 l'anomenarem com dev-sda1

Veure informació de systemd

    • Si volem veure totes les units que tenim disponibles:

systemctl list-unit-files

    • Només units que estan en marxa:

systemctl

és el mateix que:

systemctl list-units

    • Units que han fallat:

systemctl --failed

    • Mostra quin és el default target (el que antigament es deia runlevel per defecte):

systemctl get-default

    • Veure les dependències de les units:

systemctl list-dependencies

    • Veure els sockets i que activen:

systemctl list-sockets

Treballant amb els serveis

    • Gestió amb interfície gràfica:

systemadm

    • Habilitar una unit:

systemctl enable -f unit

    • Reiniciar una unit:

systemctl restart unit

    • Veure propietats d'un service (o una unit):

systemctl show service

    • Matar tots els procesos relatius a un servei:

systemctl kill service

Canviar l'estat del sistema:

systemctl reboot

systemctl poweroff

systemctl suspend

systemctl hibernate

systemctl hybrid-sleep

systemctl emergency (equival a init 1)

systemctl default (anem al mode normal; multiusuari)

Informació del sistema

*Informació detallada hostname:

hostnamectl

*Informació detallada sobre dia i hora:

timedatectl

Logs

systemd te el seu propi servei de logs i per tant els equips que corren systemd no precisen del dimoni syslog.

    • Per a llegir el log:

journalctl

    • Logs de l'últim arranc:

journalctl -b

    • Logs del penúltim arranc:

journalctl -b -1

    • Logs des de una data i hora determinada:

journalctl --since="2014-1-1 15:30"

    • Logs des de fa 20 minuts o de l'ultim dia:

journalctl --since="20 min ago"

journalctl --since=today

    • Anar veient els últims logs:

journalctl -f

    • Si volem enviar els logs al tty10, hem de posar aquestes línies a /etc/systemd/journald.conf:

ForwardToConsole=yes

TTYPath=/dev/tty10

MaxLevelConsole=info

Hem de reiniciar el sevei per a que sigui efectiu: systemctl restart systemd-journald

    • Veure els missatges generats per un binary específic:

journalctl /usr/lib/systemd/systemd

    • Veure els missatges generats per un procés específic:

journalctl _PID=1

Per a veure el PID d'un servei determinat, p.e. el podem reiniciar (en aquell moment ens diu el PID o bé obtenir amb systemctl status.

    • Veure els missatges d'una unit específica:

journalctl -u netcfg

Tags: Debian, start, arranque, boot, systemd, initd, initrd, arrancada, runlevel, init, telinit, devuan, antix