systemctl y systemd explicado fácil (con ejemplos reales)


Introducción


Si trabajas con Linux moderno, hay una herramienta que vas a usar constantemente:

👉 systemctl

Este comando forma parte de systemd, el sistema que gestiona servicios y procesos del sistema.

Antes de systemd, Linux usaba otros sistemas como init o upstart, pero hoy en día systemd es el estándar en la mayoría de distribuciones.

Aprender systemctl es clave si quieres:

  • iniciar o detener servicios
  • configurar servidores
  • manejar MySQL, Nginx, Apache
  • trabajar con VPS
  • automatizar arranque de servicios
  • hacer debugging de servicios


Qué es systemd

systemd es el sistema que gestiona:

  • servicios
  • procesos del sistema
  • arranque del sistema
  • dependencias entre servicios

👉 Es el “director de orquesta” de Linux.



Qué es systemctl

systemctl es el comando que usas para interactuar con systemd.

Con él puedes:

  • iniciar servicios
  • detenerlos
  • reiniciarlos
  • ver estado
  • habilitar al arranque


Qué es un servicio

Un servicio es un proceso que corre en segundo plano.

Ejemplos:

  • nginx
  • mysql
  • ssh
  • docker


Ver estado de un servicio

systemctl status nginx

Esto muestra:

  • si está activo
  • logs recientes
  • PID
  • errores


Iniciar un servicio

sudo systemctl start nginx


Detener un servicio

sudo systemctl stop nginx


Reiniciar un servicio

sudo systemctl restart nginx


Recargar configuración (sin reiniciar)

sudo systemctl reload nginx

👉 Muy útil en producción.



Ver si un servicio está activo

systemctl is-active nginx


Ver todos los servicios

systemctl list-units --type=service


Habilitar servicio al iniciar el sistema

sudo systemctl enable nginx

👉 Se ejecutará al arrancar el sistema.



Deshabilitar servicio

sudo systemctl disable nginx


Diferencia entre start y enable


  • start → lo ejecuta ahora
  • enable → lo ejecuta al arrancar

👉 Importante entender esto.



Logs de un servicio con journalctl

journalctl -u nginx

👉 Muy útil para debugging.



Ver logs en tiempo real

journalctl -u nginx -f


Ejemplo real: MySQL no arranca

systemctl status mysql

👉 Verás error.

Luego:

journalctl -u mysql

👉 Detectas problema.



Ejemplo real: reiniciar servidor web


sudo systemctl restart nginx

Ejemplo real: habilitar SSH


sudo systemctl enable ssh
sudo systemctl start ssh


Qué son los unit files


systemd usa archivos llamados units.

Ubicación:

/etc/systemd/system/

Ahí defines servicios personalizados.



Crear un servicio propio


Ejemplo básico:

[Unit]
Description=Mi app

[Service]
ExecStart=/usr/bin/node app.js

[Install]
WantedBy=multi-user.target


Recargar systemd después de cambios

sudo systemctl daemon-reload


Errores comunes

  • olvidar sudo
  • usar start en vez de enable
  • no revisar logs
  • no recargar daemon
  • no entender dependencias


Conclusión:

systemctl es una de las herramientas más importantes en Linux moderno.

Si sabes:

  • ver estado
  • iniciar/detener servicios
  • leer logs
  • habilitar servicios

👉 ya puedes administrar servidores de verdad.