15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
31.10.2024

Comandos Systemctl: Cómo Reiniciar, Recargar y Detener Servicios en Linux

Gestionar servicios de manera eficiente es una de las habilidades más críticas para cualquier administrador de sistemas Linux. Ya sea que estés ejecutando un servidor web de alto tráfico en un plan de VPS Hosting o manteniendo un entorno de Servidor Dedicado, entender cómo controlar servicios del sistema usando systemctl es absolutamente esencial. Esta guía completa cubre todo lo que necesitas saber sobre reiniciar, recargar y detener servicios en Linux usando systemd y systemctl.

¿Qué es systemd y por qué es importante?

systemd es el sistema init predeterminado y el gestor de servicios utilizado en prácticamente todas las distribuciones Linux modernas, incluyendo Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux y Fedora. Reemplazó sistemas init más antiguos como SysVinit y Upstart, trayendo mejoras significativas en cómo Linux arranca y gestiona procesos.

Características clave de systemd

  • Inicio paralelo de servicios — Reduce dramáticamente los tiempos de arranque iniciando servicios simultáneamente
  • Activación de servicios bajo demanda — Los servicios pueden iniciarse solo cuando sea necesario, conservando recursos del sistema
  • Gestión de dependencias — Maneja automáticamente las dependencias y el orden de los servicios
  • Registro centralizado — Se integra con journald para la gestión de registros unificada y estructurada
  • Control de recursos basado en Cgroup — Rastrea y limita el uso de CPU, memoria e I/O por servicio
  • Activación de Socket y D-Bus — Habilita patrones avanzados de comunicación entre procesos

Entender systemd no es solo académico — impacta directamente la estabilidad, rendimiento y seguridad de tu entorno Linux.

¿Qué es systemctl?

systemctl es la interfaz de línea de comandos principal para interactuar con systemd. Permite a los administradores:

  • Iniciar, detener, reiniciar y recargar servicios
  • Habilitar o deshabilitar servicios al arranque
  • Verificar el estado del servicio y ver registros
  • Gestionar objetivos del sistema (runlevels)
  • Recargar la configuración del demonio systemd

Todos los comandos systemctl que modifican el estado del sistema requieren privilegios de root o acceso sudo.

Comandos systemctl principales para la gestión de servicios

1. Reiniciar un servicio

Reiniciar un servicio lo detiene completamente y luego lo inicia de nuevo. Esta es la operación preferida cuando:

  • Has realizado cambios de configuración que requieren un reinicio completo del proceso
  • Un servicio se ha bloqueado o se ha vuelto no responsivo
  • Necesitas aplicar archivos binarios actualizados después de una actualización de paquete

Sintaxis:

sudo systemctl restart <service_name>

Ejemplo — Reiniciar el servidor web Nginx:

sudo systemctl restart nginx

Ejemplo — Reiniciar el servidor web Apache:

sudo systemctl restart apache2

Ejemplo — Reiniciar la base de datos MySQL/MariaDB:

sudo systemctl restart mysql

> Importante: Reiniciar un servicio causa una breve interrupción. Para entornos de producción, considera usar reload cuando sea compatible para evitar tiempo de inactividad.

2. Recargar un servicio

Recargar instruye a un servicio en ejecución para que vuelva a leer sus archivos de configuración sin detener el proceso. Esto es ideal para aplicar cambios de configuración sin tiempo de inactividad.

Sintaxis:

sudo systemctl reload <service_name>

Ejemplo — Recargar Nginx después de editar su configuración:

sudo systemctl reload nginx

Ejemplo — Recargar el demonio SSH después de modificar sshd_config:

sudo systemctl reload sshd

> Nota: No todos los servicios soportan la operación reload. Si un servicio no la implementa, systemctl devolverá un error. En esos casos, usa restart en su lugar.

Consejo profesional — Usa reload-or-restart para máxima compatibilidad:

sudo systemctl reload-or-restart <service_name>

Este comando intenta una recarga primero. Si el servicio no soporta recarga, automáticamente vuelve a un reinicio completo — convirtiéndolo en la opción más segura para implementaciones con scripts y automatización.

3. Detener un servicio

Detener un servicio lo termina inmediatamente. Usa esto cuando necesites desconectar un servicio para mantenimiento, solución de problemas o reconfiguración.

Sintaxis:

sudo systemctl stop <service_name>

Ejemplo — Detener el servidor web Nginx:

sudo systemctl stop nginx

Ejemplo — Detener el servicio de firewall:

sudo systemctl stop ufw

> Advertencia: Detener un servicio crítico (como sshd en un servidor remoto) puede bloquearte el acceso a tu sistema. Siempre asegúrate de tener un método de acceso alternativo, como una consola o gestión fuera de banda, antes de detener servicios esenciales.

4. Iniciar un servicio

Si un servicio no está en ejecución actualmente, usa el comando start para iniciarlo.

Sintaxis:

sudo systemctl start <service_name>

Ejemplo:

sudo systemctl start nginx

5. Habilitar un servicio al arranque

Habilitar un servicio crea los enlaces simbólicos necesarios para que systemd lo inicie automáticamente durante el arranque del sistema.

Sintaxis:

sudo systemctl enable <service_name>

Ejemplo:

sudo systemctl enable nginx

Habilitar e iniciar simultáneamente (recomendado):

sudo systemctl enable --now nginx

6. Deshabilitar un servicio al arranque

Deshabilitar un servicio evita que se inicie automáticamente, pero no lo detiene si está en ejecución actualmente.

Sintaxis:

sudo systemctl disable <service_name>

Ejemplo:

sudo systemctl disable bluetooth

Deshabilitar y detener simultáneamente:

sudo systemctl disable --now bluetooth

7. Verificar el estado del servicio

El comando status es uno de los comandos systemctl más utilizados. Proporciona una instantánea en tiempo real del estado de un servicio, incluyendo entradas de registro recientes.

Sintaxis:

sudo systemctl status <service_name>

Ejemplo — Verificar el estado de Nginx:

sudo systemctl status nginx

Salida de ejemplo:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-01-15 10:23:45 UTC; 2h 34min ago
       Docs: man:nginx(8)
    Process: 1234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 1235 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 6.2M
        CPU: 45ms
     CGroup: /system.slice/nginx.service
             ├─1235 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─1236 "nginx: worker process"

La salida incluye:

  • Loaded — Si el archivo de unidad está cargado y si está habilitado al arranque
  • Active — Estado de ejecución actual (active (running), inactive (dead), failed, etc.)
  • Main PID — El ID de proceso principal del servicio
  • Memory/CPU — Métricas de consumo de recursos
  • CGroup — La jerarquía del grupo de control
  • Recent logs — Últimas entradas de diario para diagnósticos rápidos

Comandos systemctl avanzados

Verificar si un servicio está activo o habilitado

Para uso en scripts y automatización, estos comandos devuelven códigos de salida simples de estilo booleano:

# Check if a service is currently running
systemctl is-active nginx

# Check if a service is enabled at boot
systemctl is-enabled nginx

# Check if a service has failed
systemctl is-failed nginx

Listar todos los servicios

# List all loaded and active units
systemctl list-units --type=service

# List all installed unit files and their states
systemctl list-unit-files --type=service

# List only failed services
systemctl --failed

Recargar el demonio systemd

Después de crear o modificar archivos de unidad, debes recargar el demonio systemd para reconocer los cambios:

sudo systemctl daemon-reload

Enmascarar y desenmascarar un servicio

Enmascarar un servicio evita que se inicie manualmente o automáticamente — incluso por otros servicios:

# Prevent a service from ever starting
sudo systemctl mask <service_name>

# Re-enable a masked service
sudo systemctl unmask <service_name>

Referencia rápida: Hoja de trucos de comandos systemctl

ComandoDescripción
systemctl start <service>Iniciar un servicio detenido
systemctl stop <service>Detener un servicio en ejecución
systemctl restart <service>Detener y reiniciar un servicio
systemctl reload <service>Recargar configuración sin detener
systemctl reload-or-restart <service>Recargar si es compatible, si no reiniciar
systemctl enable <service>Habilitar servicio al arranque
systemctl disable <service>Deshabilitar servicio al arranque
systemctl enable --now <service>Habilitar e iniciar inmediatamente
systemctl disable --now <service>Deshabilitar y detener inmediatamente
systemctl status <service>Mostrar estado del servicio y registros
systemctl is-active <service>Verificar si el servicio está en ejecución
systemctl is-enabled <service>Verificar si el servicio se inicia al arranque
systemctl is-failed <service>Verificar si el servicio ha fallado
systemctl list-units --type=serviceListar todos los servicios activos
systemctl --failedListar todos los servicios fallidos
systemctl daemon-reloadRecargar archivos de unidad systemd
systemctl mask <service>Evitar completamente que el servicio se inicie
systemctl unmask <service>Eliminar máscara del servicio

Casos de uso prácticos para administradores de servidores

Escenario 1: Aplicar cambios de configuración de Nginx

Has editado /etc/nginx/nginx.conf en tu servidor web. Para aplicar cambios sin descartar conexiones activas:

# First, test the configuration syntax
sudo nginx -t

# If the test passes, reload gracefully
sudo systemctl reload nginx

Escenario 2: Recuperar un servicio fallido

Un servicio se ha bloqueado y muestra un estado failed:

# Check what went wrong
sudo systemctl status myapp.service

# View full logs for the service
sudo journalctl -u myapp.service -n 50 --no-pager

# Restart the service
sudo systemctl restart myapp.service

Escenario 3: Configurar un nuevo servicio después de la implementación

Después de implementar una nueva aplicación con un archivo de unidad personalizado:

# Reload systemd to recognize the new unit file
sudo systemctl daemon-reload

# Enable and start the service in one command
sudo systemctl enable --now myapp.service

# Verify it's running correctly
sudo systemctl status myapp.service

Diferencia entre restart, reload y stop — De un vistazo

Acción¿Proceso detenido?¿Tiempo de inactividad?Caso de uso
stopMantenimiento, solución de problemas
restartSí, luego reiniciadoBreveCambios de configuración que requieren reinicio completo
reloadNoNingunoCambios de configuración sin tiempo de inactividad
reload-or-restartSolo si es necesarioMínimoAutomatización y scripting seguros

Gestionar servicios en diferentes entornos de alojamiento

Los comandos systemctl cubiertos en esta guía se aplican universalmente en entornos de alojamiento basados en Linux. Ya sea que estés gestionando servicios en un

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar