Systemd és el sistema init, col·lecció de dimonis i eines d'administració de sistemes que s'han convertit en el nou estàndard per administrar serveis a Linux. Systemctl és una eina de línia d'ordres per administrar i controlar els serveis de systemd. Amb systemctl, pots iniciar, aturar, enumerar, habilitar i deshabilitar els serveis de systemd des de la línia d'ordres.
Systemd utilitza fitxers d'unitat basats en el propòsit i els recursos. Per exemple, els serveis tenen un fitxer d'unitat amb extensions .service, mentre que els fitxers d'unitat de dispositiu tenen extensions .device. Tots els fitxers d'unitat s'emmagatzemen a
/etc/systemd/system/i
/lib/systemd/systemEls fitxers creats en temps d'execució o temps d'arrencada s'emmagatzemen a
/run/systemd/system/
En aquesta guia et mostrem com administrar serveis i unitats utilitzant l'ordre Systemctl a Ubuntu 20.04.
Requisits
- Un servidor que executi Ubuntu 20.04.
- Una contrasenya root establerta al teu servidor.
Instal·la Systemctl
Per defecte, systemctl ve preinstal·lat a la majoria dels sistemes operatius.
Pots comprovar-ho amb l'ordre següent:
# systemctl --versionHauries de veure la versió instal·lada de systemctl al resultat següent:
systemd 245 (245.4-4ubuntu3)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
Per comprovar la ubicació dels binaris i les biblioteques, utilitza l'ordre següent:
# whereis systemdAquest és el resultat que hauries d'obtenir:
systemd: /usr/bin/systemd /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz
I després, has d'executar l'ordre següent:
# whereis systemctlAquest és el resultat que hauries de veure:
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
Per comprovar si systemd s'està executant o no, utilitza l'ordre següent:
# ps -ef | grep systemdMés avall tens el resultat que hauries d'obtenir:
root 259 1 0 10:34 ? 00:00:01 /lib/systemd/systemd-journald
root 284 1 0 10:34 ? 00:00:00 /lib/systemd/systemd-udevd
systemd+ 290 1 0 10:35 ? 00:00:00 /lib/systemd/systemd-networkd
message+ 309 1 0 10:35 ? 00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root 320 1 0 10:35 ? 00:00:00 /lib/systemd/systemd-logind
systemd+ 356 1 0 10:35 ? 00:00:00 /lib/systemd/systemd-resolved
root 657 1 0 10:35 ? 00:00:00 /lib/systemd/systemd --user
Llistar unitats de Systemd
Pots utilitzar l'ordre systemctl per llistar totes les unitats, les unitats actives i les inactives.
Per llistar totes les unitats, utilitza l'ordre següent:
# systemctl list-units --allHauries d'obtenir el resultat següent:
UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Formats File System Automount Point
dev-disk-by\x2did-scsi\x2d0QEMU_QEMU_HARDDISK_drive\x2dscsi0\x2d0\x2d0\x2d0.device loaded active plugged QEMU_HARDDISK
dev-disk-by\x2did-scsi\x2d0QEMU_QEMU_HARDDISK_drive\x2dscsi0\x2d0\x2d0\x2d0\x2dpart1.device loaded active plugged QEMU_HARDDISK 1
dev-disk-by\x2dpartuuid-da29c858\x2d01.device loaded active plugged QEMU_HARDDISK 1
dev-disk-by\x2dpath-pci\x2d0000:00:05.0\x2dscsi\x2d0:0:0:0.device loaded active plugged QEMU_HARDDISK
dev-disk-by\x2dpath-pci\x2d0000:00:05.0\x2dscsi\x2d0:0:0:0\x2dpart1.device loaded active plugged QEMU_HARDDISK 1
dev-disk-by\x2duuid-29a0b164\x2d1ba1\x2d45a7\x2db23a\x2dcdb98f23edbc.device loaded active plugged QEMU_HARDDISK 1
dev-rfkill.device loaded active plugged /dev/rfkill
dev-sda.device loaded active plugged QEMU_HARDDISK
dev-sda1.device loaded active plugged QEMU_HARDDISK 1
Per llistar totes les unitats actives, utilitza l'ordre següent:
# systemctl list-unitsMés avall hi ha el resultat que hauries d'obtenir:
proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Formats File System Automount Point
sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device loaded active plugged Virtio network device
sys-devices-pci0000:00-0000:00:04.0-virtio1-net-eth1.device loaded active plugged Virtio network device
sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda-sda1.device loaded active plugged QEMU_HARDDISK 1
sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda.device loaded active plugged QEMU_HARDDISK
sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS1
sys-devices-platform-serial8250-tty-ttyS10.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS10
sys-devices-platform-serial8250-tty-ttyS11.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS11
Per llistar totes les unitats inactives, utilitza l'ordre següent:
# systemctl list-units --all --state=inactiveAquest és el resultat que hauries d'obtenir:
UNIT LOAD ACTIVE SUB DESCRIPTION >
proc-sys-fs-binfmt_misc.mount loaded inactive dead Arbitrary Executable File Forma>
● tmp.mount not-found inactive dead tmp.mount >
ntp-systemd-netif.path loaded inactive dead ntp-systemd-netif.path >
acpid.service loaded inactive dead ACPI event daemon >
apt-daily-upgrade.service loaded inactive dead Daily apt upgrade and clean act>
apt-daily.service loaded inactive dead Daily apt download activities >
● auditd.service not-found inactive dead auditd.service >
● connman.service not-found inactive dead connman.service >
● console-screen.service not-found inactive dead console-
screen.service >
Llistar serveis Systemd
Per llistar tots els serveis, utilitza l'ordre següent:
# systemctl list-units --type=service Més avall hi ha el resultat que hauries de veure:
UNIT LOAD ACTIVE SUB DESCRIPTION
apache2.service loaded active running The Apache HTTP Server
console-setup.service loaded active exited Set console font and keymap
cron.service loaded active running Regular background program processing daemon
csm.service loaded active exited Cloud Service Manager
dbus.service loaded active running D-Bus System Message Bus
getty@tty1.service loaded active running Getty on tty1
grub-common.service loaded active exited LSB: Record successful boot for GRUB
Per llistar tots els serveis que s'estan executant, utilitza l'ordre següent:
# systemctl list-units --type=service --state=runningHauries de veure el resultat següent:
UNIT LOAD ACTIVE SUB DESCRIPTION
apache2.service loaded active running The Apache HTTP Server
cron.service loaded active running Regular background program processing daemon
dbus.service loaded active running D-Bus System Message Bus
getty@tty1.service loaded active running Getty on tty1
networkd-dispatcher.service loaded active running Dispatcher daemon for systemd-networkd
ntp.service loaded active running Network Time Service
rsyslog.service loaded active running System Logging Service
serial-getty@ttyS0.service loaded active running Serial Getty on ttyS0
ssh.service loaded active running OpenBSD Secure Shell server
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running Login Service
systemd-networkd.service loaded active running Network Service
systemd-resolved.service loaded active running Network Name Resolution
systemd-udevd.service loaded active running udev Kernel Device Manager
user@0.service loaded active running User Manager for UID 0
Per llistar tots els serveis inactius, utilitza l'ordre següent:
# systemctl list-units --type=service --state=inactiveMés avall tens el resultat que hauries d'obtenir:
UNIT LOAD ACTIVE SUB DESCRIPTION
acpid.service loaded inactive dead ACPI event daemon
apt-daily-upgrade.service loaded inactive dead Daily apt upgrade and clean activities
apt-daily.service loaded inactive dead Daily apt download activities
● auditd.service not-found inactive dead auditd.service
● connman.service not-found inactive dead connman.service
● console-screen.service not-found inactive dead console-screen.service
Comprovar l'estat d'un servei
També pots comprovar l'estat d'un servei específic utilitzant l'ordre systemctl.
Per exemple, utilitza l'ordre següent per comprovar l'estat del servei d'Apache:
# systemctl status apache2Aquest és el resultat que hauries de veure:
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-07-21 11:27:53 UTC; 2min 57s ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 1986 (apache2)
Tasks: 55 (limit: 2353)
Memory: 5.3M
CGroup: /system.slice/apache2.service
├─1986 /usr/sbin/apache2 -k start
├─1988 /usr/sbin/apache2 -k start
└─1989 /usr/sbin/apache2 -k start
També pots utilitzar les ordres següents per comprovar si un servei en concret està en estat actiu, habilitat o fallit:
# systemctl is-active apache2
# systemctl is-enabled apache2
# systemctl is-failed apache2Iniciar i aturar un servei
Pots iniciar un servei fàcilment utilitzant l'ordre systemctl.
Per iniciar el servei Nginx, utilitza l'ordre següent:
# systemctl start nginxPer aturar el servei Nginx, utilitza l'ordre següent:
# systemctl stop nginxSi vols reiniciar el servei pots utilitzar l'ordre següent:
# systemctl restart nginxEn cas que només necessitis recarregar el servei pots executar:
# systemctl reload nginxHabilitar i deshabilitar un servei
Quan inicies qualsevol servei utilitzant l'ordre systemctl, no s'iniciarà automàticament després d'un reinici del sistema. Hauràs d'habilitar que el servei s'iniciï amb un reinici del sistema.
Per habilitar el servei Nginx, utilitza l'ordre següent:
# systemctl enable nginxPer deshabilitar que el servei s'iniciï amb un reinici del sistema, utilitza l'ordre següent:
# systemctl disable nginxEmmascarar i desemmascarar un servei
Emmascarar un servei impedeix que el servei s'iniciï manualment o automàticament.
Per emmascarar el servei MySQL, utilitza l'ordre següent:
# systemctl mask mysqlPer desemmascarar el servei MySQL, pots fer-ho amb l'ordre següent:
# systemctl unmask mysqlSi vols eliminar tots els processos i processos fills del servei Apache, fes-ho amb l'ordre següent:
# systemctl kill apache2Mostrar propietats d'un servei
Per mostrar les propietats del servei Apache, utilitza l'ordre següent:
# systemctl show apache2Per mostrar el contingut del fitxer de servei Apache, fes-ho amb l'ordre següent:
# systemctl cat apache2Més avall tens el resultat que hauries d'obtenir:
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=https://httpd.apache.org/docs/2.4/
[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl graceful
PrivateTmp=true
Restart=on-abort
[Install]
WantedBy=multi-user.target
Per mostrar dependències del servei Apache, utilitza l'ordre següent:
# systemctl list-dependencies apache2Aquest és el resultat que hauries d'obtenir:
apache2.service
● ├─-.mount
● ├─system.slice
● └─sysinit.target
● ├─dev-hugepages.mount
● ├─dev-mqueue.mount
● ├─keyboard-setup.service
● ├─kmod-static-nodes.service
● ├─proc-sys-fs-binfmt_misc.automount
● ├─setvtrgb.service
● ├─sys-fs-fuse-connections.mount
● ├─sys-kernel-config.mount
● ├─sys-kernel-debug.mount
● ├─sys-kernel-tracing.mount
● ├─systemd-ask-password-console.path
● ├─systemd-binfmt.service
● ├─systemd-boot-system-token.service
● ├─systemd-hwdb-update.service
Conclusió
Esperem que t'hagis familiaritzat amb com utilitzar systemctl per gestionar i controlar els teus serveis systemd.
També pots utilitzar systemctl per solucionar incidències de configuració que es puguin produir.