Inicio y detención de servicios de Systemd
systemdes la nueva forma de ejecutar servicios en Linux. systemd tiene un sysvinit reemplazado . systemd brinda tiempos de arranque más rápidos a Linux y ahora es una forma estándar de administrar los servicios de Linux. Si bien es estable, systemd todavía está evolucionando.
systemd como un sistema de inicio, se usa para administrar tanto los servicios como los demonios que necesitan cambios de estado después de que se haya iniciado el kernel de Linux. Por cambio de estado, se aplica el inicio, la parada, la recarga y el ajuste del estado de servicio.
Primero, verifiquemos la versión de systemd que se está ejecutando actualmente en nuestro servidor.
[centos@localhost ~]$ systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
[centos@localhost ~]$
A partir de la versión 7 de CentOS, completamente actualizada en el momento de escribir este artículo, la versión 219 de systemd es la versión estable actual.
También podemos analizar el último tiempo de arranque del servidor con systemd-analyse
[centos@localhost ~]$ systemd-analyze
Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s
[centos@localhost ~]$
Cuando los tiempos de arranque del sistema son más lentos, podemos usar el comando systemd-analyse blame .
[centos@localhost ~]$ systemd-analyze blame
40.882s kdump.service
5.775s NetworkManager-wait-online.service
4.701s plymouth-quit-wait.service
3.586s postfix.service
3.121s systemd-udev-settle.service
2.649s tuned.service
1.848s libvirtd.service
1.437s network.service
875ms packagekit.service
855ms gdm.service
514ms firewalld.service
438ms rsyslog.service
436ms udisks2.service
398ms sshd.service
360ms boot.mount
336ms polkit.service
321ms accounts-daemon.service
Al trabajar con systemd , es importante comprender el concepto de unidades .Unitsson los recursos que systemd sabe interpretar. Las unidades se clasifican en 12 tipos de la siguiente manera:
- .service
- .socket
- .device
- .mount
- .automount
- .swap
- .target
- .path
- .timer
- .snapshot
- .slice
- .scope
En su mayor parte, trabajaremos con .service como objetivos unitarios. Se recomienda realizar más investigaciones sobre los otros tipos. Como solo las unidades .service se aplicarán al inicio y la detención de servicios systemd .
Cada unidad se define en un archivo ubicado en:
/lib/systemd/system - archivos de unidad base
/etc/systemd/system - archivos de unidad modificados iniciados en tiempo de ejecución
Administrar servicios con systemctl
Para trabajar con systemd , necesitaremos familiarizarnos con el comando systemctl . A continuación se muestran los modificadores de línea de comando más comunes para systemctl .
Cambiar | Acción |
---|---|
-t | Valor separado por comas de tipos de unidades como servicio o socket |
-un | Muestra todas las unidades cargadas |
--estado | Muestra todas las unidades en un estado definido, ya sea: carga, sub, activo, inactivo, etc. |
-H | Ejecuta la operación de forma remota. Especifique el nombre de host o host y usuario separados por @. |
Uso básico de systemctl
systemctl [operation]
example: systemctl --state [servicename.service]
Para un vistazo rápido a todos los servicios que se ejecutan en nuestra caja.
[root@localhost rdc]# systemctl -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
blk-availability.service loaded active exited Availability of block devices
bluetooth.service loaded active running Bluetooth service
chronyd.service loaded active running NTP client/server
Detención de un servicio
Primero, detengamos el servicio bluetooth.
[root@localhost]# systemctl stop bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded inactive dead Bluetooth service
[root@localhost]#
Como podemos ver, el servicio bluetooth ahora está inactivo.
Para volver a iniciar el servicio bluetooth.
[root@localhost]# systemctl start bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded active running Bluetooth service
[root@localhost]#
Note- No especificamos bluetooth.service, ya que el .service está implícito. Es una buena práctica pensar en el tipo de unidad que agrega el servicio con el que estamos tratando. Entonces, de aquí en adelante, usaremos la extensión .service para aclarar que estamos trabajando en las operaciones de la unidad de servicio.
Las acciones principales que se pueden realizar en un servicio son:
comienzo | Inicia el servicio |
Detener | Detiene un servicio |
Recargar | Recarga la configuración activa de un servicio sin detenerlo (como kill -HUP en system v init) |
Reiniciar | Inicia y luego detiene un servicio |
Habilitar | Inicia un servicio en el momento del arranque |
Inhabilitar | Evita que un servicio se inicie automáticamente en tiempo de ejecución |
Las acciones anteriores se utilizan principalmente en los siguientes escenarios:
comienzo | Para activar un servicio que se ha puesto en estado detenido. |
Detener | Para cerrar temporalmente un servicio (por ejemplo, cuando un servicio debe detenerse para acceder a archivos bloqueados por el servicio, como cuando se actualiza el servicio) |
Recargar | Cuando se ha editado un archivo de configuración y queremos aplicar los nuevos cambios sin detener el servicio. |
Reiniciar | En el mismo escenario que la recarga, pero el servicio no admite la recarga . |
Habilitar | Cuando queremos que un servicio deshabilitado se ejecute en el momento del arranque. |
Inhabilitar | Se utiliza principalmente cuando es necesario detener un servicio, pero se inicia al arrancar. |
Para comprobar el estado de un servicio:
[root@localhost]# systemctl status network.service
network.service - LSB: Bring up/down networking
Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago
Docs: man:systemd-sysv-generator(8)
Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS)
localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking...
localhost.localdomain network[923]: Bringing up loopback interface: [ OK ]
localhost.localdomain systemd[1]: Started LSB: Bring up/down networking.
[root@localhost]#
Muéstranos el estado actual del servicio de red . Si queremos ver todos los servicios relacionados con las redes, podemos utilizar -
[root@localhost]# systemctl --all -t service | grep -i network
network.service loaded active exited LSB: Bring up/
NetworkManager-wait-online.service loaded active exited Network Manager
NetworkManager.service loaded active running Network Manager
ntpd.service loaded inactive dead Network Time
rhel-import-state.service loaded active exited Import network
[root@localhost]#
Para aquellos familiarizados con el sysinitmétodo de gestión de servicios, es importante hacer la transición a systemd . systemd es la nueva forma de iniciar y detener servicios demonio en Linux.