Service Management en Systemd
Cubre los flujos de trabajo systemctl para iniciar, activar, supervisar y personalizar servicios systemd.
Los servicios de un sistema Oracle Linux se gestionan mediante el comando systemctl subcommand.
Algunos ejemplos de subcomandos son enable, disable, stop, start, restart, reload y status.
Para obtener más información, consulte la página del manual systemctl(1).
Inicio y Parada de Servicios
Muestra los comandos systemctl start y systemctl stop básicos y explica cómo persisten los cambios de estado.
Para iniciar un servicio, utilice el comando systemctl start:
sudo systemctl start sshd
Para detener un servicio, utilice el comando systemctl stop:
sudo systemctl stop sshd
El cambio del estado de un servicio solo dura mientras el sistema permanece en el mismo estado.
Si detiene un servicio y, a continuación, cambia el destino de estado del sistema a uno en el que el servicio está configurado para ejecutarse (por ejemplo, reiniciando el sistema), el servicio se reinicia. Del mismo modo, el inicio de un servicio no permite que se inicie después de un reinicio. Consulte Activación y Desactivación de Servicios.
Activación y Desactivación de Servicios
Explica cómo activar, desactivar, enmascarar y desenmascarar servicios para que se inicien (o permanezcan detenidos) tras los reinicios.
Puede utilizar el comando systemctl para activar o desactivar un servicio desde el inicio cuando se inicia el sistema, por ejemplo:
sudo systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
El comando enable activa un servicio mediante la creación de un enlace simbólico para el destino de estado del sistema de nivel más bajo en el que se inicia el servicio. En el ejemplo anterior, el comando crea el enlace simbólico httpd.service para el destino multi-user.
Para iniciar el servicio al mismo tiempo que lo activa, incluya la opción --now en el comando. Por ejemplo:
sudo systemctl enable --now httpdLa desactivación de un servicio elimina el enlace simbólico:
sudo systemctl disable httpd
Removed /etc/systemd/system/multi-user.target.wants/httpd.service.
Para comprobar si un servicio está activado, utilice el subcomando is-enabled, como se muestra en los siguientes ejemplos:
systemctl is-enabled httpd
disabled
systemctl is-enabled sshd
enabled
Después de ejecutar el comando systemctl disable, las cuentas del usuario, las secuencias de comandos y otros procesos pueden iniciar o detener el servicio.
Sin embargo, si necesita asegurarse de que un servicio en conflicto no pueda iniciar el servicio de forma involuntaria, por ejemplo, utilice el comando systemctl mask de la siguiente manera:
sudo systemctl mask httpd
Created symlink from '/etc/systemd/system/multi-user.target.wants/httpd.service' to '/dev/null'
El comando mask define la referencia de servicio en /dev/null. Si intenta iniciar un servicio que se ha enmascarado, recibirá un error como se muestra en el siguiente ejemplo:
sudo systemctl start httpd
Failed to start httpd.service: Unit is masked.
Para volver a enlazar la referencia de servicio al archivo de configuración de unidad de servicio coincidente, utilice el comando systemctl unmask:
sudo systemctl unmask httpd
Para obtener más información, consulte la página del manual systemctl(1).
Visualización del estado de los servicios
Detalla los comandos systemctl is-active y status para comprobar el estado del servicio y los grupos de control.
Para comprobar si un servicio se está ejecutando, utilice el subcomando is-active. La salida sería active o inactive, como se muestra en los siguientes ejemplos:
systemctl is-active httpd
active
systemctl is-active sshd
inactive
El subcomando status proporciona un resumen detallado del estado de un servicio, incluido un árbol que muestra las tareas del grupo de control (CGroup) que implementa el servicio:
systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since ...
Docs: man:httpd.service(8)
Main PID: 11832 (httpd)
Status: "Started, listening on: port 80"
Tasks: 213 (limit: 26213)
Memory: 32.5M
CGroup: /system.slice/httpd.service
├─11832 /usr/sbin/httpd -DFOREGROUND
├─11833 /usr/sbin/httpd -DFOREGROUND
├─11834 /usr/sbin/httpd -DFOREGROUND
├─11835 /usr/sbin/httpd -DFOREGROUND
└─11836 /usr/sbin/httpd -DFOREGROUND
Jul 17 00:14:32 Unknown systemd[1]: Starting The Apache HTTP Server...
Jul 17 00:14:32 Unknown httpd[11832]: Server configured, listening on: port 80
Jul 17 00:14:32 Unknown systemd[1]: Started The Apache HTTP Server.
cgroup es una recopilación de procesos que están enlazados entre sí para que pueda controlar su acceso a los recursos del sistema. En el ejemplo, cgroup para el servicio httpd es httpd.service, que está en el segmento system.
Los segmentos dividen cgroups en un sistema en diferentes categorías. Para mostrar el segmento y la jerarquía cgroup, utilice el comando systemd-cgls:
systemd-cgls
Control group /:
-.slice
├─user.slice
│ └─user-1000.slice
│ ├─user@1000.service
│ │ └─init.scope
│ │ ├─6488 /usr/lib/systemd/systemd --user
│ │ └─6492 (sd-pam)
│ └─session-7.scope
│ ├─6484 sshd: root [priv]
│ ├─6498 sshd: root@pts/0
│ ├─6499 -bash
│ ├─6524 sudo systemd-cgls
│ ├─6526 systemd-cgls
│ └─6527 less
├─init.scope
│ └─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 16
└─system.slice
├─rngd.service
│ └─1266 /sbin/rngd -f --fill-watermark=0
├─irqbalance.service
│ └─1247 /usr/sbin/irqbalance --foreground
├─libstoragemgmt.service
│ └─1201 /usr/bin/lsmd -d
├─systemd-udevd.service
│ └─1060 /usr/lib/systemd/systemd-udevd
├─polkit.service
│ └─1241 /usr/lib/polkit-1/polkitd --no-debug
├─chronyd.service
│ └─1249 /usr/sbin/chronyd
├─auditd.service
│ ├─1152 /sbin/auditd
│ └─1154 /usr/sbin/sedispatch
├─tuned.service
│ └─1382 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
├─systemd-journald.service
│ └─1027 /usr/lib/systemd/systemd-journald
├─atd.service
│ └─1812 /usr/sbin/atd -f
├─sshd.service
│ └─1781 /usr/sbin/sshd
system.slice contiene servicios y otros procesos del sistema. user.slice contiene procesos de usuario, que se ejecutan en cgroups transitorios denominados ámbitos.
En el ejemplo, los procesos para el usuario con el ID 1000 se ejecutan en el ámbito session-7.scope en el segmento /user.slice/user-1000.slice.
Puede utilizar el comando systemctl para limitar la CPU, la E/S, la memoria y otros recursos que están disponibles para los procesos en los cgroups de servicio y ámbito. Consulte Controlling Access to System Resources.
Para obtener más información, consulte las páginas del manual systemctl(1) y systemd-cgls(1). Consulte también Using Systemd to Manage Control Groups.
Control de acceso a recursos del sistema
Muestra cómo utilizar systemctl set-property y systemd-run para asignar límites de CPU y memoria a servicios y ámbitos.
Utilice el comando systemctl para controlar el acceso de un cgroup a los recursos del sistema, por ejemplo:
sudo systemctl [--runtime] set-property httpd CPUShares=512 MemoryLimit=1G
CPUShare controla el acceso a los recursos de CPU. Como el valor por defecto es 1024, un valor de 512 reduce a la mitad el tiempo de acceso a la CPU que tienen los procesos en cgroup. Del mismo modo, MemoryLimit controla la cantidad máxima de memoria que puede utilizar cgroup.
No es necesario especificar la extensión .service para el nombre de un servicio.
Si especifica la opción --runtime, la configuración no se mantiene tras los reinicios del sistema.
También puede cambiar la configuración de recursos para un servicio en la cabecera [Service] del archivo de configuración del servicio en /usr/lib/systemd/system. Después de editar el archivo, vuelva a cargar los archivos de configuración systemd y, a continuación, reinicie el servicio:
sudo systemctl daemon-reload
sudo systemctl restart service
Puede ejecutar comandos generales dentro de los ámbitos y utilizar systemctl para controlar el acceso que estos cgroups transitorios tienen a los recursos del sistema. Para ejecutar un comando dentro de un ámbito, utilice el comando systemd-run:
sudo systemd-run --scope --unit=group_name.scope [--slice=slice_name]
Si no desea crear el grupo en el segmento system por defecto, puede especificar otro segmento o el nombre de un nuevo segmento. En el siguiente ejemplo, se ejecuta un comando denominado mymonitor en mymon.scope en myslice.slice:
sudo systemd-run --scope --unit=mymon.scope --slice=myslice mymonitor
Running as unit mymon.scope.
Si no especifica la opción --scope, el grupo de control se crea como un servicio en lugar de como un ámbito.
A continuación, puede utilizar systemctl para controlar el acceso que un ámbito tiene a los recursos del sistema de la misma manera que para un servicio. Sin embargo, a diferencia de un servicio, debe especificar la extensión .scope, por ejemplo:
sudo systemctl --runtime set-property mymon.scope CPUShares=256
Para obtener más información, consulte Using Systemd to Manage Control Groups y las páginas del manual systemctl(1), systemd-cgls(1) y systemd.resource-control(5).
Creación de un servicio systemd basado en usuario
Además de los archivos systemd de todo el sistema, systemd permite crear servicios basados en el usuario que se pueden ejecutar desde el nivel de usuario sin necesidad de acceso y privilegios de usuario root. Estos servicios basados en el usuario están bajo el control del usuario y se pueden configurar independientemente de los servicios del sistema.
A continuación se muestran algunas características distintivas de los servicios systemd basados en el usuario:
- Los servicios
systemdbasados en el usuario están enlazados a una cuenta de usuario específica. - Se crean en el directorio raíz del usuario asociado en
$HOME/.config/systemd/user/. - Después de activar estos servicios, se inician cuando el usuario asociado se conecta. Este comportamiento difiere del de los servicios
systemdactivados que se inician cuando se inicia el sistema.
Esta función es especialmente útil al crear servicios de contenedor Podman. Para obtener más información sobre Podman, consulte la Guía del usuario de Oracle Linux: Podman.
Para crear un servicio basado en el usuario:
Cambio de los archivos de la unidad de servicio systemd
Describe cómo sustituir archivos de unidad empaquetados y crear fragmentos desplegables en /etc/systemd/system.
Para cambiar la configuración de los servicios systemd, copie los archivos con extensiones .service, .target, .mount y .socket de /usr/lib/systemd/system a /etc/systemd/system.
Después de haber copiado los archivos, puede editar las versiones en /etc/systemd/system.
Los archivos de /etc/systemd/system tienen prioridad sobre las versiones de /usr/lib/systemd/system. Los archivos de /etc/systemd/system no se sobrescriben cuando actualiza un paquete que toca archivos de /usr/lib/systemd/system.
Para volver a la configuración por defecto de systemd para un servicio concreto, puede cambiar el nombre o suprimir las copias en /etc/systemd/system.
Otro enfoque para cambiar la configuración de un servicio es crear un archivo desplegable. Con este enfoque, puede conservar la unidad original mientras cambia los parámetros específicos de la unidad.
Cree archivos desplegables en /etc/systemd/system/unit_name.d/, donde el directorio unit_name.d es una unidad existente y, a continuación, proporcione a los archivos desplegables una extensión de archivo .conf.
Por ejemplo: /etc/systemd/system/unit_name.d/name_of_drop-in.conf. systemd lee el archivo .conf y aplica la configuración a la unidad original.
En las siguientes secciones, se describen las diferentes partes de un archivo de unidad de servicio que puede editar y personalizar para un sistema.
Acerca de los archivos de unidades de servicio
Los servicios se ejecutan en función de sus archivos de unidad de servicio correspondientes. Un archivo de unidad de servicio normalmente contiene las siguientes secciones, y cada sección tiene sus respectivas opciones definidas que determinan cómo se ejecuta un servicio específico:
-
[Unit] -
Contiene información sobre el servicio.
[UnitType]:-
Contiene opciones que son específicas del tipo de unidad del archivo. Por ejemplo, en un archivo de unidad de servicio, esta sección se titula
[Service]y contiene opciones que son específicas de unidades del tipo de servicio, comoExecStartoStandardOutput.Sólo los tipos de unidad que ofrecen opciones específicas para su tipo tienen dicha sección.
-
[Install] -
Contiene información de instalación para la unidad específica. La información de esta sección la utilizan los comandos systemctl enable y systemctl disable.
Un archivo de unidad de servicio puede contener las siguientes configuraciones para un servicio.
[Unit]
Description=A test service used to develop a service unit file template
[Service]
Type=simple
StandardOutput=journal
ExecStart=/usr/lib/systemd/helloworld.sh
[Install]
WantedBy=default.target
En Opciones Configurables en Archivos de Unidades de Servicio, se describen algunas opciones configuradas que se utilizan habitualmente en cada sección. También se puede consultar una lista completa en las páginas del manual systemd.service(5) y systemd.unit(5).
Opciones configurables en archivos de unidad de servicio
Cada una de las siguientes listas se ocupa de una sección independiente del archivo de unidad de servicio.
Descripción de las opciones de la sección [Unidad]
En la siguiente lista, se proporciona una visión general de las opciones configurables que se utilizan habitualmente en la sección [Unit] del archivo de unidad de servicio:
-
Description -
Proporciona información sobre el servicio. La información se muestra al ejecutar el comando
systemctl statusen la unidad. -
Documentation -
Contiene una lista separada por espacios de los URI que hacen referencia a la documentación de esta unidad o su configuración.
-
After -
Configura la unidad para que solo se ejecute después de que las unidades enumeradas en la opción terminen de iniciarse.
En el siguiente ejemplo, si el archivo var3.
servicetiene la siguiente entrada, solo se inicia después de que se hayan iniciado las unidadesvar1.serviceyvar2.service:After=var1.service var2.service -
Requires -
Permite configurar una unidad para que tenga dependencias de condición académica en otras unidades. Si se activa una unidad, también se activan las que se muestran en su opción
Requires. -
Wants -
Una versión menos estricta de la opción
Requires. Por ejemplo, se puede activar una unidad específica incluso si una de las enumeradas en su opciónWantsno se inicia.
Descripción de las opciones de la sección [Servicio]
En la siguiente lista, se proporciona una visión general de las opciones configurables que se utilizan habitualmente en la sección [Service] de un archivo de unidad de servicio.
-
Type -
Permite configurar el tipo de inicio de proceso para la unidad de servicio.
Por defecto, el valor de este parámetro es
simple, que indica que el proceso principal del servicio es el que inicia el parámetroExecStart.Normalmente, si el tipo de un servicio es
simple, la definición se puede omitir del archivo. -
StandardOutput -
Configura el modo en que se registran los eventos del servicio. Por ejemplo, considere que un archivo de unidad de servicio tiene la siguiente entrada:
StandardOutput=journalEn el ejemplo, el valor
journalindica que los eventos se registran en el asiento, que se puede ver mediante el comandojournalctl. -
ExecStart -
Especifica la ruta completa y el comando que inicia el servicio, por ejemplo,
/usr/bin/npm start. -
ExecStop -
Especifica los comandos que se deben ejecutar para parar el servicio iniciado mediante
ExecStart. -
ExecReload -
Especifica los comandos que se deben ejecutar para disparar una recarga de configuración en el servicio.
-
Restart -
Configura si el servicio se reiniciará cuando se cierre el proceso de servicio, se detenga o cuando se alcance un timeout.
Nota
Esta opción no se aplica cuando una operaciónsystemdpara el proceso de forma limpia, por ejemplo,systemctl stoposystemctl restart. En estos casos, esta opción de configuración no reinicia el servicio. -
RemainAfterExit -
Valor booleano que configura si el servicio se debe considerar activo incluso cuando todos sus procesos han salido. El valor por defecto es
no.
Descripción de las opciones de la sección [Instalar]
En la siguiente lista, se proporciona una visión general de las opciones configurables que se utilizan habitualmente en la sección [Install] del archivo de unidad de servicio.
-
Alias -
Lista separada por espacios de nombres para una unidad.
En el momento de la instalación,
systemctl enablecrea enlaces simbólicos desde estos nombres hasta el nombre de archivo de la unidad.Los alias solo son efectivos cuando la unidad está habilitada.
-
RequiredBy -
Configura el servicio que necesitan otras unidades.
Por ejemplo, considere un archivo de unidad
var1.serviceque tenga la siguiente configuración agregada:RequiredBy=var2.service var3.serviceCuando
var1.serviceestá activado, tantovar2.servicecomovar3.servicetienen otorgada una dependenciaRequiresenvar1.service. Esta dependencia se define mediante un enlace simbólico creado en la carpeta.requiresde cada servicio dependiente (var2.serviceyvar3.service) que apunta al archivo de unidad del sistemavar1.service. -
WantedBy -
Especifica una lista de unidades a las que se va a otorgar una dependencia
wantsen el servicio cuyo archivo está editando.Por ejemplo, considere un archivo de unidad
var1.serviceque tenga la siguiente configuración agregada:WantedBy=var2.service var3.serviceCuando
var1.serviceestá activado, tantovar2.servicecomovar3.servicetienen otorgada una dependenciaWantsenvar1.service. Esta dependencia se define mediante un enlace simbólico que se crea en la carpeta ".wants" de cada servicio dependiente (var2.serviceyvar3.service) que apunta al archivo de unidad del sistema paravar1.service. -
Also -
Muestra las unidades adicionales que se deben instalar o quitar cuando se instala o elimina la unidad.
-
DefaultInstance -
La opción
DefaultInstancesolo se aplica a los archivos de unidad de plantilla.Los archivos de unidad de plantilla permiten la creación de varias unidades desde un único archivo de configuración. La opción
DefaultInstanceespecifica la instancia para la que se activa la unidad si la plantilla está activada sin ninguna instancia definida explícitamente.
Creación de un archivo desplegable de unidad
Puede utilizar el comando systemctl edit para generar automáticamente un archivo de unidad o un archivo desplegable de unidad systemd para cualquier unidad systemd existente. Puede utilizar el archivo desplegable para sustituir la configuración base de una unidad o para ampliar los requisitos de un archivo de unidad.