Gestión de Servicios
Comandos Básicos de Servicio
systemctl start nginx systemctl stop nginx systemctl restart nginx systemctl reload nginx # recargar configuración systemctl status nginx
Activar / Desactivar
systemctl enable nginx # iniciar al arranque systemctl disable nginx # quitar del arranque systemctl enable --now nginx # activar + iniciar systemctl is-enabled nginx
Estados del Servicio
active (running)El servicio está ejecutándose normalmente
active (exited)Se ejecutó una vez y salió correctamente
inactive (dead)El servicio está detenido
failedEl servicio falló o salió con error
activatingEl servicio está iniciando
Archivos de Unidad
Ubicación de Archivos de Unidad
/etc/systemd/system/Unidades creadas por el administrador (mayor prioridad)
/run/systemd/system/Unidades generadas en tiempo de ejecución
/usr/lib/systemd/system/Unidades instaladas por paquetes
~/.config/systemd/user/Unidades a nivel de usuario
Unidad de Servicio Básica
[Unit] Description=My Application After=network.target [Service] ExecStart=/usr/bin/myapp --config /etc/myapp.conf Restart=on-failure User=appuser [Install] WantedBy=multi-user.target
Aplicar Cambios
systemctl daemon-reload # recargar archivos de unidad systemctl restart myapp # aplicar cambios
Temporizadores
Unidad de Temporizador
[Unit] Description=Ejecutar copia de seguridad diariamente [Timer] OnCalendar=*-*-* 02:00:00 Persistent=true [Install] WantedBy=timers.target
Sintaxis de OnCalendar
*-*-* 02:00:00Diariamente a las 2:00 AM
Mon *-*-* 09:00:00Todos los lunes a las 9 AM
*-*-01 00:00:00Primer día de cada mes
hourly / daily / weeklyProgramaciones abreviadas
Gestión de Temporizadores
systemctl list-timers --all systemctl start backup.timer systemctl enable backup.timer systemd-analyze calendar "daily"
Targets
Targets Comunes
multi-user.targetArranque normal, multiusuario, sin GUI
graphical.targetEscritorio GUI completo
rescue.targetModo de rescate monousuario
emergency.targetShell mínima, solo root
network-online.targetRed completamente configurada
timers.targetTodas las unidades de temporizador listas
Comandos de Target
systemctl get-default systemctl set-default multi-user.target systemctl isolate rescue.target systemctl list-dependencies graphical.target
Journalctl
Ver Registros
journalctl -u nginx # registros de la unidad journalctl -u nginx -f # seguir (tail) journalctl -u nginx --no-pager journalctl -b # solo arranque actual
Filtrar Registros
journalctl --since "2026-03-01" journalctl --since "1 hour ago" journalctl -p err # errores y superior journalctl _PID=1234
Niveles de Prioridad
emerg (0)El sistema no puede utilizarse
alert (1)Se requiere acción inmediata
crit (2)Condición crítica
err (3)Condición de error
warning (4)Condición de advertencia
info (6)Informativo
debug (7)Mensajes de nivel debug
Mantenimiento de Registros
journalctl --disk-usage journalctl --vacuum-size=500M journalctl --vacuum-time=30d
Red
networkctl
networkctl list networkctl status eth0 networkctl up eth0 networkctl down eth0
systemd-resolve
resolvectl status resolvectl query example.com resolvectl flush-caches resolvectl statistics
Esperar Red
# En la sección [Unit] del archivo de unidad: After=network-online.target Wants=network-online.target
Montajes
Unidad de Montaje
[Unit] Description=Montar volumen de datos [Mount] What=/dev/sdb1 Where=/mnt/data Type=ext4 Options=defaults,noatime [Install] WantedBy=multi-user.target
Unidad de Automontaje
[Unit] Description=Automontaje de datos al acceder [Automount] Where=/mnt/data TimeoutIdleSec=300 [Install] WantedBy=multi-user.target
Convención de Nombres
/mnt/dataArchivo de unidad: mnt-data.mount
/var/lib/appArchivo de unidad: var-lib-app.mount

Ruta de montaje con `/` reemplazado por `-`, guión inicial eliminado

Variables de Entorno
Establecer Variables de Entorno
[Service] Environment=APP_ENV=production Environment=PORT=8080 EnvironmentFile=/etc/myapp/env
Formato de Archivo de Entorno
# /etc/myapp/env APP_ENV=production DATABASE_URL=postgres://localhost/db SECRET_KEY=changeme
Endurecimiento del Servicio
ProtectSystem=strictSistema de archivos de solo lectura excepto rutas permitidas
ProtectHome=trueOcultar /home, /root, /run/user
NoNewPrivileges=trueEvitar escalada de privilegios
PrivateTmp=true/tmp aislado para el servicio
ReadWritePaths=/var/lib/myappPermitir escritura en rutas específicas
Dependencias
Directivas de Ordenamiento y Requerimiento
After=b.serviceIniciar después de b (solo ordenamiento)
Before=b.serviceIniciar antes de b (solo ordenamiento)
Requires=b.serviceDependencia fuerte; fallar si b falla
Wants=b.serviceDependencia débil; no fallar si b falla
BindsTo=b.serviceDetener cuando b se detiene
Conflicts=b.serviceNo puede ejecutarse al mismo tiempo que b
Inspeccionar Dependencias
systemctl list-dependencies nginx systemctl list-dependencies --reverse nginx systemd-analyze dot nginx.service | dot -Tsvg > deps.svg
Patrones Comunes
Políticas de Reinicio
Restart=noNunca reiniciar (por defecto)
Restart=on-failureReiniciar si sale con código distinto de cero
Restart=alwaysReiniciar siempre (para demonios)
RestartSec=5Esperar 5 segundos antes de reiniciar
StartLimitBurst=3Máximo de reinicios en el intervalo
StartLimitIntervalSec=60Intervalo para el conteo de reinicios
Sobrescribir sin Editar
systemctl edit nginx # crea drop-in # /etc/systemd/system/nginx.service.d/override.conf systemctl cat nginx # mostrar configuración efectiva systemctl revert nginx # eliminar sobrescrituras
Análisis del Sistema
systemd-analyze # tiempo de arranque systemd-analyze blame # tiempo por unidad systemd-analyze critical-chain systemctl list-units --failed