Linux / Comando systemctl: consultar, iniciar y habilitar servicios

systemctl consulta el estado de los servicios y otras unidades gestionadas por systemd, y controla el inicio, la detención, el reinicio y el arranque automático al encender el sistema. Al investigar fallos en los servicios, primero verifique el estado actual con status. Las condiciones y procedimientos relacionados se pueden encontrar en Verificar servicios systemd y registros de arranque.

start es la acción que se ejecuta ahora y enable es la acción configurada para iniciarse durante el arranque. No se reemplazan automáticamente entre sí. active y enabled también representan el estado de activación de la unidad y la configuración de inicio, respectivamente. Especifique claramente el nombre de la unidad y revise los registros en journalctl -u.

Sintaxis básica

systemctl [OPCIONES] COMANDO [UNIDAD]

La implementación instalada y las opciones pueden variar según la distribución. Verifique la descripción de man systemctl en el sistema actual.

Ejemplos de uso

Verificación del estado del servicio

Cambie el nombre de unidad de ejemplo por el nombre real del servicio en el sistema.

systemctl status sshd.service

Verificar si se está ejecutando actualmente

Al comprobar el estado en un script, también confirme el estado de finalización.

systemctl is-active sshd.service

Verificar la configuración de inicio automático al arranque

Consulte el estado de 'enable' independientemente de la ejecución actual.

systemctl is-enabled sshd.service

Distinguir entre el estado del servicio y si se está ejecutando

systemctl is-active NOMBRE_SERVICIO indica brevemente el estado de ejecución actual. Los nombres de los servicios siguientes deben ajustarse según el entorno.

systemctl is-active sshd.service

Ejemplo de salida de un sistema con el servicio en ejecución:

active

En este ejemplo de SSH, active indica que la unidad está activa, pero el significado depende del tipo de unidad: un servicio oneshot puede permanecer activo sin mantener un proceso en ejecución. Compruebe por separado el inicio automático con systemctl is-enabled sshd.service. Antes de reiniciar un servicio, confirme su nombre, el impacto y los registros con status y journalctl -u.

start inicia actualmente el servicio y enable cambia la configuración de inicio automático al arrancar. Ninguno garantiza automáticamente al otro. Si ha modificado el archivo de unidad, vuelva a leer la definición con sudo systemctl daemon-reload y luego reinicie los servicios necesarios y verifique el estado y los registros.

Opciones y formatos principales

Opciones·Formato Descripción
status UNIDAD Muestra el estado y un resumen de los registros recientes.
start / stop UNIDAD Inicia o detiene la unidad actualmente.
restart UNIDAD Al detener y reiniciar, se puede interrumpir la conexión.
reload UNIDAD Si el servicio lo admite, vuelve a leer la configuración sin reiniciar.
enable / disable UNIDAD Cambia la configuración de inicio automático al arrancar.

Precauciones al usar

Detener o reiniciar servicios de acceso remoto o web puede interrumpir conexiones y solicitudes. Revise la unidad exacta, la ventana de mantenimiento y la recuperación. daemon-reload vuelve a leer las definiciones de unidades; no reinicia por sí mismo un servicio ni sustituye la recarga de su configuración. Estos comandos requieren un sistema gestionado por systemd.

Preguntas frecuentes

¿Se ejecuta inmediatamente un servicio al usar systemctl enable?

Normalmente no. Enable es la configuración de inicio automático al arranque. Si desea ejecutarlo ahora, debe ejecutar start por separado o usar la opción --now si está disponible.

Comparar el estado de ejecución e inicio automático en una unidad exclusiva para práctica

Se ejecuta en una VM de práctica exclusiva donde systemd es el proceso inicial, con identificador de proceso (PID) 1. Compruebe previamente systemctl cat lf-systemctl-lab.service; si ya existe una unidad o un complemento con ese nombre en cualquier ubicación, deténgase y elija otro nombre en todas las instrucciones. No se detienen los servicios SSH o web reales y se crea una nueva unidad oneshot. Si ya existen archivos o drop-ins con nombres fijos de práctica, se interrumpe. La activación cambia temporalmente la configuración de arranque, por lo que realice la limpieza después de completar el bloque.

(
set -eu
unit=lf-systemctl-lab.service
file=/etc/systemd/system/$unit
if sudo test -e "$file" || sudo test -L "$file" ||
   sudo test -e "$file.d"; then
    printf 'Lab name already exists; stop and choose another name.\n' >&2
    exit 1
fi
sudo sh -c 'set -C; cat > "$1"' sh "$file" <<'EOF'
[Unit]
Description=Linux Factory systemctl state lab
[Service]
Type=oneshot
ExecStart=/usr/bin/true
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemd-analyze verify "$file"
sudo systemctl daemon-reload
sudo systemctl start "$unit"
systemctl is-active "$unit"
sudo systemctl enable "$unit"
systemctl is-enabled "$unit"
sudo systemctl stop "$unit"
systemctl is-active "$unit" || true
systemctl is-enabled "$unit"
sudo systemctl disable "$unit"
systemctl is-enabled "$unit" || true
)

Después de start es active, después de enable es enabled. Después de stop, aunque sea inactive, enabled permanece, y después de disable es disabled. Este oneshot puede ser active aunque no haya un proceso en ejecución a largo plazo, porque RemainAfterExit=yes. Después de confirmar que el contenido del archivo es exactamente el mismo que en este ejemplo y que no hay otras ediciones, detenga y desactive con sudo systemctl disable --now lf-systemctl-lab.service, luego elimine solo /etc/systemd/system/lf-systemctl-lab.service que se creó esta vez y ejecute sudo systemctl daemon-reload. Incluso en caso de fallo, investigue y limpie solo el mismo objetivo.

Documentación oficial

El funcionamiento exacto de las opciones y las diferencias según la implementación se pueden consultar en la documentación oficial relacionada con systemctl.