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.

[[email protected] ~]$ systemctl --version 
systemd 219 
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP 
+GCRYPT +GNUTLS +ACL     +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN

[[email protected] ~]$

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

[[email protected] ~]$ systemd-analyze    
Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s 
[[email protected] ~]$

Cuando los tiempos de arranque del sistema son más lentos, podemos usar el comando systemd-analyse blame .

[[email protected] ~]$ 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.

[[email protected] 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.

[[email protected]]# systemctl stop bluetooth

[[email protected]]# systemctl --all -t service | grep bluetooth      
bluetooth.service   loaded    inactive dead    Bluetooth service

[[email protected]]#

Como podemos ver, el servicio bluetooth ahora está inactivo.

Para volver a iniciar el servicio bluetooth.

[[email protected]]# systemctl start bluetooth

[[email protected]]# systemctl --all -t service | grep bluetooth 
bluetooth.service  loaded    active   running Bluetooth     service

[[email protected]]#

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:

[[email protected]]# 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.

[[email protected]]#

Muéstranos el estado actual del servicio de red . Si queremos ver todos los servicios relacionados con las redes, podemos utilizar -

[[email protected]]# 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      

[[email protected]]#

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.