## 👻 Los ayudantes invisibles de [[Linux]]: Daemons y Units {#sec-6e36ad82c8cb} Al operar un sistema [[Linux]], te encontrarás con innumerables 'daemons' que se ejecutan en segundo plano. Y utilizamos una herramienta llamada `systemd` para gestionarlos. ¿Cuál es la relación entre ellos y por qué tienen nombres tan peculiares? Así como hay filosofía detrás de una línea de código, la estructura de un sistema Linux encierra una clara intención de diseño. ![Imagen de systemd dando instrucciones a varios daemons](/media/editor_temp/6/a66caf8f-e91b-4373-af97-e3f7158d0194.png "systemd가 여러 daemon에 작업지시를 내리는 이미지") ## 1. ¿Por qué 'Daemon'?: Una entidad inteligente que opera en segundo plano {#sec-facc962b0b1c} El nombre 'daemon' proviene de los **'Daemons'** de la mitología griega, seres invisibles que asistían a dioses y humanos. Más tarde, a través de la hipótesis del 'Demonio de Maxwell' propuesta por el físico Maxwell, los desarrolladores del MIT en 1963 acuñaron este término para programas que **"operan de forma autónoma en segundo plano sin intervención del usuario, tomando sus propias decisiones"**. * **Esencia:** Un daemon no interactúa directamente con el usuario. Permanece residente en la memoria incluso después de cerrar la terminal, esperando solicitudes de red o monitoreando el estado del sistema. Es en sí mismo un **'proceso en segundo plano'**. ## 2. ¿Es systemd también un Daemon?: El "Daemon maestro que gestiona otros Daemons" {#sec-37340e1c3330} Sí, lo es. La **'d'** al final de su nombre es la prueba. `systemd` es el **proceso número 1 (PID 1)** que se ejecuta primero después de que el kernel de Linux arranca, y es el **'daemon maestro'** que controla y gestiona todos los demás daemons. Antes de `systemd`, la forma en que [[Linux]] gestionaba los daemons era caótica y desorganizada. `systemd` surgió para poner fin a este desorden y gestionar todos los elementos del sistema con un **estándar unificado**. Este estándar se conoce como **'Unit'**. ## 3. Units: La 'hoja de instrucciones estándar' que impulsa a los Daemons {#sec-c8112a55b96d} Si un daemon es la 'entidad' que realiza el trabajo real, **una unit es la 'hoja de instrucciones' que describe cómo manejar esa entidad**. El daemon maestro `systemd` lee esta hoja de instrucciones (Unit) que hemos escrito y, de acuerdo con su contenido, activa o desactiva cada daemon. * **Claridad de intención:** Si no existiera el estándar de las units, cada desarrollador escribiría el código para ejecutar daemons de forma diferente. Sin embargo, gracias a la hoja de instrucciones estándar de las Units (por ejemplo, un archivo `.service`), podemos definir de manera muy precisa y robusta **"en qué entorno, en qué orden y cómo reiniciar en caso de problemas"**. * **Escalabilidad flexible:** Las units no son solo para daemons (Services). Gestionan todos los elementos de Linux, como los 'timers' que programan tareas en momentos específicos o los 'mounts' que conectan dispositivos, utilizando el mismo formato de 'hoja de instrucciones'. Esto permite expandir todo el sistema con una lógica consistente. ## 4. Relación de un vistazo {#sec-ea68ba1a28f7} | Categoría | Daemon | Unit de systemd | | :--- | :--- | :--- | | **Naturaleza** | **Proceso** que se ejecuta realmente en memoria | **Archivo de especificación** que registra la configuración del sistema | | **Función** | Ejecuta funciones reales en segundo plano | Define las condiciones de ejecución y el comportamiento del daemon | | **Analogía** | El **trabajador** que opera silenciosamente en el campo | La **hoja de instrucciones** que el trabajador sigue | > **En resumen:** > El daemon maestro `systemd` lee las **Units (hojas de instrucciones)** y dirige a los numerosos **Daemons (trabajadores)** para que operen de manera precisa según las reglas establecidas. ## 5. La identidad del trabajador es diversa: Distinguiendo correctamente entre 'Daemon' y 'Service Unit' {#sec-40ea0fcb27a7} Cuando decimos que "levantamos un servicio", la identidad del trabajador (daemon) que se ejecuta en segundo plano no es única. Cualquier programa que se ejecute en segundo plano, sin importar el lenguaje o la forma en que fue creado, puede ser un daemon. **Diversas formas de trabajadores:** - Daemons de script: Si registras código Python como Django o FastAPI que has escrito tú mismo como una unit, se convierte en un daemon de Python que se ejecuta a través del intérprete python3. - Daemons binarios: Programas como Nginx o sshd, compilados previamente en lenguajes como C o Go, son daemons en forma de archivos ejecutables. - Daemons de script de shell: Incluso un simple archivo .sh puede ser un excelente trabajador (daemon) si se ejecuta en segundo plano en un bucle infinito. **Las Service Units son el 'vínculo de conexión':** Estrictamente hablando, sshd o tu script de Python no son 'servicios' en sí mismos. Son simplemente daemons (trabajadores). El archivo .service (Unit) que creamos directamente en el directorio /etc/systemd/system/ o que se registra automáticamente al instalar un paquete, es la hoja de instrucciones que registra a ese trabajador como un miembro oficial del sistema. ## Conclusión {#sec-5483f8db76f6} Un daemon se refiere a un programa que "trabaja en segundo plano", mientras que una Service Unit es la especificación estandarizada que permite a `systemd`, el maestro, controlar ese daemon. Gracias a esta hoja de instrucciones, `systemd` puede dar órdenes de la misma manera, sin importar si el trabajador es Python o un binario. ¿Qué te parece? Llevo unos 4 o 5 años usando [[Linux]] como mi sistema principal, y aunque creía haber comprendido el concepto de ambos, me resultaba muy difícil explicárselo a alguien. Probablemente, pensaba que lo sabía, pero en realidad no lo había entendido por completo. Ahora que por fin he podido definirlo y organizarlo con mis propias palabras, siento que mi mente se ha aclarado. Escribir es realmente interesante. Aunque lleva tiempo, organizar las ideas al escribir las aclara.