systemctl es la interfaz de administración de systemd, el sistema de init y gestor de servicios usado por la mayoría de distribuciones modernas de Linux como Ubuntu, Debian, Red Hat Enterprise Linux, Rocky Linux, Fedora y SUSE Linux Enterprise.
Puedes revisar a detalle su definición en la siguiente documentación:
¿Qué es systemd?
Antes de systemd, Linux usaba sistemas como SysVinit.
Cuando arrancaba Linux:
BIOS/UEFI
↓
Bootloader (GRUB)
↓
Kernel
↓
PID 1
El proceso PID 1 es el primer proceso del sistema.
En sistemas modernos, PID 1 es:
systemd
Puedes comprobarlo:
ps -p 1
Salida:
PID TTY TIME CMD
1 ? 00:00:02 systemd
systemd administra:
- servicios
- sockets
- dispositivos
- montajes
- timers
- usuarios
- logs
- targets de arranque
Y systemctl es el cliente para controlarlo.
¿Qué hace systemctl?
Piensa en systemctl como una consola de control: systemctl → habla con systemd
Con él puedes:
- iniciar servicios
- detener servicios
- reiniciar servicios
- ver logs
- habilitar al arranque
- inspeccionar dependencias
- analizar fallos
Archivos .service
Cada servicio tiene un archivo:
/etc/systemd/system/
/usr/lib/systemd/system/
Ejemplo
nginx.service
Ver contenido:
systemctl cat nginx
Un unit file típico:
[Unit]
Description=Mi aplicación
[Service]
ExecStart=/opt/app/start.sh
Restart=always
[Install]
WantedBy=multi-user.target
Donde:
- [Unit]: Metadatos y dependencias.
- [Service]: Cómo ejecutar.
- [Install]: Cómo arrancar.
Comandos principales de systemd
Listar servicios
Todos
systemctl list-units --type=service
Solo activos:
systemctl list-units --type=service --state=active
Fallidos:
systemctl --failed
Esto es oro en troubleshooting.
Ver estado
systemctl status ssh
Ejemplo con OpenSSH:
systemctl status ssh
Te muestra:
- Estados posible
- active
- inactive
failed - activating
- deactivating
- PID
- memoria
- logs recientes
Iniciar un servicio
sudo systemctl start nginx
Ejemplo con NGINX.
Esto lo inicia ahora, pero no en el próximo reboot.
Detener
sudo systemctl stop nginx
Reiniciar
sudo systemctl restart nginx
Muy usado después de cambiar configuración.
Recargar configuración
sudo systemctl reload nginx
Recarga sin matar el proceso.
Diferencia:
reload → SIGHUP
restart → stop + start
Habilitar al arranque
sudo systemctl enable nginx
Crea enlaces simbólicos para arrancar automáticamente.
Verifica:
systemctl is-enabled nginx
Deshabilitar
sudo systemctl disable nginx
Iniciar y habilitar
Muy común:
sudo systemctl enable --now nginx
Hace ambas cosas.
Logs
systemd integra con systemd-journald.
Ver logs:
journalctl -u nginx
Tiempo real:
journalctl -u nginx -f
Última hora:
journalctl -u nginx --since "1 hour ago"
Dependencias
Ver dependencias:
systemctl list-dependencies nginx
Muy útil para entender orden de arranque.
EJEMPLO SIMPLE: crear tu propio “servicio falso”
Vamos a crear un servicio mínimo que solo imprime algo en un log.
Objetivo
Tendrás un servicio llamado: mi-servicio que ejecuta un script.
Crear un script simple
Creamos el archivo en el directorio /opt:
sudo nano /opt/mi-servicio.sh
Agregamos el siguiente contenido:
#!/bin/bash
while true
do
echo "Mi servicio está corriendo: $(date)" >> /tmp/mi-servicio.log
sleep 5
done
👉 ¿Qué hace?
- Cada 5 segundos escribe un mensaje en un archivo
- Nunca termina (como un servicio real)
Dar permisos
Damos permisos de ejecución al archivo creado:
sudo chmod +x /opt/mi-servicio.sh
Crear el servicio systemd
Creamos el servicio mi-servicio en /etc/systemd
sudo nano /etc/systemd/system/mi-servicio.service
Contenido:
[Unit]
Description=Mi servicio de ejemplo ultra simple
[Service]
ExecStart=/opt/mi-servicio.sh
Restart=always
[Install]
WantedBy=multi-user.target
Recargar systemd
Esto es OBLIGATORIO cuando creas o cambias servicios:
sudo systemctl daemon-reload
Iniciar el servicio
sudo systemctl start mi-servicio
Ver si está funcionando
systemctl status mi-servicio
Deberías ver algo como:
Active: active (running)
Ver qué está haciendo realmente
Mira el log del script:
cat /tmp/mi-servicio.log
Ejemplo de salida:
Mi servicio está corriendo: Tue May 5 12:00:01 2026
Mi servicio está corriendo: Tue May 5 12:00:06 2026
Parar el servicio
sudo systemctl stop mi-servicio
👉 Observa lo que pasa:
- deja de escribir en el log
Reiniciarlo
sudo systemctl start mi-servicio
Hacer que arranque solo al reiniciar Linux
sudo systemctl enable mi-servicio