Fundamentos de la gestión de servicios: comandos systemctl
(inicio, detención, reinicio de servicios)
1. ¿Qué son los servicios en Linux?
Los servicios son la base de cualquier distribución moderna de Linux. ¿Quieres poner en marcha tu servidor web con Nginx? Arranca y configura el servicio correspondiente. ¿Quieres que funcione la base de datos MySQL? Otra vez, es un servicio. Incluso tu querido cron
, que ejecuta esos geniales bash-scripts, también es un servicio. Gestionar servicios es una habilidad que definitivamente usarás no solo en el trabajo, sino también para tus proyectos personales. Por cierto, en entrevistas de trabajo, la pregunta "¿Y cómo detendrías un servicio?" aparece más a menudo de lo que piensas.
Definición y rol
Un servicio en Linux es un programa que se ejecuta en segundo plano (es decir, como un demonio, del inglés "daemon"). Estos programas pueden iniciarse automáticamente al iniciar el sistema o manualmente cuando sea necesario. Son responsables de realizar tareas específicas como:
- Atender solicitudes web (por ejemplo,
nginx
/apache
). - Soportar acceso remoto (por ejemplo,
openssh
). - Ejecutar tareas programadas (por ejemplo,
cron
).
En esencia, los servicios son esos "caballos de batalla" que realizan tareas invisibles al usuario, pero absolutamente críticas para el funcionamiento del sistema.
2. Fundamentos de la gestión de servicios con systemctl
¿Qué es systemctl
?
Empecemos con que systemctl
es el comando principal para gestionar servicios en sistemas que utilizan systemd. Si tu sistema funciona en una distribución moderna de Linux (por ejemplo, Ubuntu, Fedora o CentOS), lo más probable es que esté utilizando systemd
.
Funciones principales
- Iniciar un servicio: comenzar a ejecutar un servicio si está detenido.
- Detener un servicio: finalizar la ejecución de un servicio.
- Reiniciar un servicio: detenerlo primero y luego volver a ejecutarlo.
- Verificar el estado: conocer el estado actual de un servicio.
Aquí tienes la estructura básica del comando:
sudo systemctl [acción] [nombre_del_servicio]
Iniciar y detener un servicio
Iniciar:
Imagínate que has instalado el servidor web nginx
y quieres iniciarlo. Para esto se utiliza el comando start
:
sudo systemctl start nginx
Detener:
¿Y qué pasa si quieres desactivar temporalmente el servidor web? Aquí te ayudará el comando stop
:
sudo systemctl stop nginx
Reiniciar un servicio
Reiniciar es necesario para aplicar cambios en la configuración o simplemente "refrescar" el servicio (en otras palabras, como si le dieras un café para recordar que tiene que trabajar). Usa el comando restart
:
sudo systemctl restart nginx
Verificar el estado
¿No estás seguro si nginx
está funcionando? El comando status
proporcionará información completa:
sudo systemctl status nginx
En la salida verás:
- Identificador único del proceso (PID).
- Hora de inicio.
- Registros de errores, si algo salió mal.
Ejemplo de salida:
nginx.service - A high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-11-01 09:00:00 UTC; 10min ago
...
3. Autoarranque de servicios
Habilitar autoarranque
Para que un servicio se inicie automáticamente cada vez que arranca el sistema, utiliza:
sudo systemctl enable nginx
Deshabilitar autoarranque
Y si quieres que el servicio ya no se inicie al arrancar el sistema:
sudo systemctl disable nginx
Aquí tienes una manera sencilla de verificar si el autoarranque está habilitado:
systemctl is-enabled nginx
Práctica con gestión de servicios
Hagamos un ejercicio completo usando como ejemplo el servicio cron
.
Inicia el servicio
cron
:sudo systemctl start cron
Verifica si está funcionando:
sudo systemctl status cron
Asegúrate de que el estado sea "active (running)".
Detén el servicio
cron
:sudo systemctl stop cron
Verifica que el estado cambie a "inactive (dead)".
Reinicia el servicio
cron
:sudo systemctl restart cron
4. Diferencias entre servicios activos, deshabilitados y terminados con errores
Los servicios pueden tener diferentes estados. Estos son los principales tipos:
- Active (running) — el servicio está funcionando activamente; todo está en orden.
- Inactive (dead) — el servicio está detenido.
- Failed — ocurrió un error al iniciar, detener o ejecutar el servicio.
Para encontrar rápidamente todos los servicios que están en estado de error, usa:
systemctl --failed
5. Errores típicos y trampas
Error: Unit not found
Si obtienes un mensaje como este:
Failed to start nginx.service: Unit nginx.service not found.
Esto puede significar que el servicio que necesitas no está instalado o que el nombre está mal escrito. Verifica el nombre correcto:
systemctl list-unit-files | grep nginx
Error de permisos
Si olvidaste ejecutar el comando con permisos de sudo
, probablemente recibirás un mensaje de acceso denegado:
Permission denied
No olvides añadir sudo
antes de los comandos de systemctl
.
6. Aplicación en proyectos reales
La gestión de servicios es algo que usarás en cualquier rol relacionado con Linux:
- DevOps: automatización y gestión de todos los servicios del sistema.
- Administración de servidores: supervisión del estado de servidores web, bases de datos y otros servicios.
- Desarrollo en Linux: necesitas entender cómo gestionar los servicios relacionados con tu proyecto (por ejemplo, iniciar servidores de desarrollo).
Por lo tanto, conocer el comando systemctl
no es solo una habilidad abstracta, sino una herramienta real de trabajo. Ejemplo: ¿necesitas reiniciar el servidor web después de actualizar un sitio? ¡Un solo comando sudo systemctl restart nginx
y asunto resuelto!
GO TO FULL VERSION