Red Hat Training

A Red Hat training course is available for RHEL 8

3.2. Gestión de los servicios del sistema

Las versiones anteriores de Red Hat Enterprise Linux, que se distribuían con SysV init o Upstart, utilizaban init scripts ubicado en el directorio /etc/rc.d/init.d/. Estos scripts de init estaban típicamente escritos en Bash y permitían al administrador del sistema controlar el estado de los servicios y demonios en su sistema. A partir de Red Hat Enterprise Linux 7, estos scripts de init han sido reemplazados por service units.

Las unidades de servicio terminan con la extensión de archivo .service y tienen un propósito similar al de los scripts de init. Para ver, iniciar, detener, reiniciar, habilitar o deshabilitar los servicios del sistema, utilice el comando systemctl como se describe en Comparación de la utilidad de servicio con systemctl, Comparación de la utilidad chkconfig con systemctl, y más adelante en esta sección. Los comandos service y chkconfig todavía están disponibles en el sistema y funcionan como se espera, pero sólo se incluyen por razones de compatibilidad y deben evitarse.

Tabla 3.3. Comparación de la utilidad de servicio con systemctl

serviciosystemctlDescripción

service name start

systemctl start name.service

Inicia un servicio.

service name stop

systemctl stop name.service

Detiene un servicio.

service name restart

systemctl restart name.service

Reinicia un servicio.

service name condrestart

systemctl try-restart name.service

Reinicia un servicio sólo si se está ejecutando.

service name reload

systemctl reload name.service

Vuelve a cargar la configuración.

service name status

systemctl status name.service

systemctl is-active name.service

Comprueba si un servicio se está ejecutando.

service --status-all

systemctl list-units --type service --all

Muestra el estado de todos los servicios.

Tabla 3.4. Comparación de la utilidad chkconfig con systemctl

chkconfigsystemctlDescripción

chkconfig name on

systemctl enable name.service

Activa un servicio.

chkconfig name off

systemctl disable name.service

Desactiva un servicio.

chkconfig --list name

systemctl status name.service

systemctl is-enabled name.service

Comprueba si un servicio está activado.

chkconfig --list

systemctl list-unit-files --type service

Enumera todos los servicios y comprueba si están activados.

chkconfig --list

systemctl list-dependencies --after

Enumera los servicios que se ordenan para comenzar antes de la unidad especificada.

chkconfig --list

systemctl list-dependencies --before

Enumera los servicios que se ordenan para iniciarse después de la unidad especificada.

Especificación de las unidades de servicio

Para mayor claridad, todos los ejemplos de comandos en el resto de esta sección utilizan nombres completos de unidades con la extensión de archivo .service, por ejemplo:

# systemctl stop nfs-server.service

Sin embargo, se puede omitir la extensión del archivo, en cuyo caso la utilidad systemctl asume que el argumento es una unidad de servicio. El siguiente comando es equivalente al anterior:

# systemctl stop nfs-server

Además, algunas unidades tienen nombres de alias. Esos nombres pueden tener nombres más cortos que las unidades, que pueden utilizarse en lugar de los nombres reales de las unidades. Para encontrar todos los alias que se pueden utilizar para una unidad en particular, utilice:

# systemctl show nfs-server.service -p Nombres

Comportamiento de systemctl en un entorno chroot

Si se cambia el directorio raíz utilizando el comando chroot, la mayoría de los comandos systemctl se niegan a realizar cualquier acción. La razón de esto es que el proceso systemd y el usuario que utilizó el comando chroot no tienen la misma vista del sistema de archivos. Esto sucede, por ejemplo, cuando se invoca systemctl desde un archivo kickstart.

La excepción a esto son los comandos de archivos de unidad como los comandos systemctl enable y systemctl disable. Estos comandos no necesitan un sistema en ejecución y no afectan a los procesos en ejecución, pero sí afectan a los archivos de unidad. Por lo tanto, puede ejecutar estos comandos incluso en el entorno chroot. Por ejemplo, para habilitar el servicio httpd en un sistema bajo el directorio /srv/website1/:

# chroot /srv/website1
# systemctl enable httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service, pointing to /usr/lib/systemd/system/httpd.service.

3.2.1. Servicios de listado

Para listar todas las unidades de servicio cargadas actualmente, escriba lo siguiente en un prompt del shell:

systemctl list-units --type service

Para cada archivo de unidad de servicio, este comando muestra su nombre completo (UNIT) seguido de una nota sobre si el archivo de unidad ha sido cargado (LOAD), su estado de activación de archivo de unidad de alto nivel (ACTIVE) y de bajo nivel (SUB), y una breve descripción (DESCRIPTION).

Por defecto, el comando systemctl list-units sólo muestra las unidades activas. Si desea listar todas las unidades cargadas independientemente de su estado, ejecute este comando con la opción de línea de comandos --all o -a:

systemctl list-units --type service --all

También puede listar todas las unidades de servicio disponibles para ver si están habilitadas. Para ello, escriba:

systemctl list-unit-files --type service

Para cada unidad de servicio, este comando muestra su nombre completo (UNIT FILE) seguido de información sobre si la unidad de servicio está habilitada o no (STATE). Para obtener información sobre cómo determinar el estado de las unidades de servicio individuales, consulte Visualización del estado del servicio.

Ejemplo 3.1. Servicios de listado

Para listar todas las unidades de servicio cargadas actualmente, ejecute el siguiente comando:

$ systemctl list-units --type 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-vmcore.service            loaded active exited  Harvest vmcores for ABRT
abrt-xorg.service              loaded active running ABRT Xorg log watcher
abrtd.service                  loaded active running ABRT Automated Bug Reporting Tool
…​
systemd-vconsole-setup.service loaded active exited  Setup Virtual Console
tog-pegasus.service            loaded active running OpenPegasus CIM Server

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

46 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'

Para listar todos los archivos de unidades de servicio instalados para determinar si están habilitados, escriba:

$ systemctl list-unit-files --type service
UNIT FILE                                   STATE
abrt-ccpp.service                           enabled
abrt-oops.service                           enabled
abrt-vmcore.service                         enabled
abrt-xorg.service                           enabled
abrtd.service                               enabled
…​
wpa_supplicant.service                      disabled
ypbind.service                              disabled

208 unit files listed.