El término daemon proviene de la mitología griega antigua, donde hacía referencia a un ser inmaterial que influía en el mundo humano.
En informática, especialmente en los sistemas operativos tipo UNIX, un daemon es un proceso en segundo plano que se ejecuta sin interacción directa del usuario. No depende de una terminal o interfaz de usuario y normalmente se inicia con el arranque del sistema o bajo ciertas condiciones.
La función principal de un daemon es proporcionar servicios específicos a otros procesos o usuarios. Por ejemplo, un daemon puede escuchar en puertos de red esperando conexiones, supervisar eventos del sistema y responder cuando se cumplen ciertas condiciones, gestionar tareas programadas (como cron), enviar correos electrónicos (sendmail) y mucho más.
En Windows, el equivalente más cercano a un daemon es un servicio (Service). La diferencia radica principalmente en cómo se inician, registran, gestionan y configuran dentro del sistema operativo. Sin embargo, su propósito es el mismo: garantizar la operación continua en segundo plano de ciertas funciones o servicios.
Se ejecuta en segundo plano: los usuarios normalmente no ven la interfaz del daemon; no escribe en la salida estándar (o la redirige a los registros) ni solicita entrada por teclado.
Autónomo: un daemon se inicia al arrancar el sistema cuando lo activa un sistema de inicio (como systemd) o manualmente por el usuario (mediante scripts, cron, etc.).
Larga duración: idealmente, un daemon se ejecuta indefinidamente a menos que ocurra un error crítico o reciba una señal de detención explícita.
Aislado: generalmente se ejecuta bajo una cuenta de usuario o grupo separada para minimizar privilegios, lo que hace que los servicios sean más seguros y fáciles de administrar.
Registro: en lugar de usar la entrada/salida estándar, los daemons registran información en archivos de registro o en el registrador del sistema (journald, syslog, etc.), lo cual es útil para la depuración y el diagnóstico.
Históricamente, casi todas las tareas del sistema en segundo plano en Linux se implementan como daemons. El sistema operativo incluye docenas de ellos, cada uno responsable de una función específica. Aquí algunos ejemplos:
sshd (Secure Shell Daemon): escucha en el puerto 22 (por defecto) y permite que los usuarios remotos se conecten mediante SSH cifrado. Sin sshd, el acceso remoto por terminal sería casi imposible.
cron: un daemon planificador de tareas. Revisa las entradas del crontab y ejecuta scripts o comandos en horarios establecidos, como limpieza de registros, envío de informes, comprobaciones del sistema, etc.
syslogd / rsyslog / journald: daemons de registro del sistema que recopilan mensajes del kernel, utilidades, otros daemons y aplicaciones, y los guardan en archivos de registro o en el journal.
NetworkManager o Wicd: daemons que gestionan la configuración de red, automatizando conexiones a redes cableadas o inalámbricas, cambios, configuración de VPN y más.
Estos daemons se inician con el arranque del sistema y están registrados en el gestor de servicios (por ejemplo, systemd). Se ejecutan hasta que el sistema se apaga o reinicia. Los usuarios interactúan con ellos de forma indirecta, mediante archivos de configuración, comandos de terminal (service, systemctl) o solicitudes de red (si el daemon ofrece una interfaz HTTP/S, SSH u otra).
Para implementar un daemon, siga estos pasos:
Creación del proceso (fork): el proceso padre llama a fork() y continúa ejecutando el código del daemon en el proceso hijo.
Desvincular del terminal de control (setsid): para evitar la interferencia del usuario (por ejemplo, cerrar la terminal), el daemon llama a setsid() para iniciar una nueva sesión y convertirse en su líder.
Cerrar descriptores de entrada/salida estándar: como el daemon no debe escribir en la pantalla ni esperar entrada, stdin, stdout y stderr se cierran o se redirigen a archivos de registro.
Manejo de señales y registro: para permitir un apagado limpio o la recarga de configuración, el daemon debe manejar señales (SIGTERM, SIGHUP, etc.). El registro suele realizarse mediante syslog o archivos.
Bucle principal: tras la inicialización, el daemon entra en su bucle principal: espera eventos, los maneja y repite el ciclo hasta que se detiene.
Veamos cómo crear un daemon en Ubuntu 22.04 utilizando un servidor en la nube de Hostman.
Cree un archivo llamado mydaemon.c e inserte el siguiente código:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <syslog.h>
int main() {
// Abrir syslog
openlog("mydaemon", LOG_PID, LOG_DAEMON);
syslog(LOG_NOTICE, "Daemon started");
// Bucle infinito principal
while (1) {
// Tareas en segundo plano: monitoreo, gestión de colas, etc.
syslog(LOG_NOTICE, "Performing task...");
sleep(60);
}
// Si el bucle termina
syslog(LOG_NOTICE, "Daemon stopped");
closelog();
return 0;
}
Primero, actualice sus paquetes:
sudo apt update && sudo apt upgrade
Instale el compilador GCC si no está instalado:
sudo apt install gcc
Compile el daemon:
gcc mydaemon.c -o mydaemon
Mueva el binario a /usr/local/bin/, una ubicación estándar para utilidades personalizadas:
mv mydaemon /usr/local/bin/mydaemon
Cree un archivo de unidad llamado mydaemon.service:
sudo nano /etc/systemd/system/mydaemon.service
Inserte el siguiente contenido:
[Unit]
Description=My Daemon
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mydaemon
Restart=on-failure
[Install]
WantedBy=multi-user.target
Explicación de los campos:
Description: descripción mostrada en systemctl status.After=network.target: asegura que el daemon se inicie después de que la red esté activa.Type=simple: el daemon no crea subprocesos, se ejecuta como un solo proceso.ExecStart: ruta al ejecutable del daemon.Restart=on-failure: reinicia automáticamente si el daemon falla.WantedBy=multi-user.target: hace que el servicio se inicie en el entorno estándar multiusuario.sudo systemctl daemon-reload # Recargar configuración de systemd
sudo systemctl start mydaemon # Iniciar el daemon
sudo systemctl status mydaemon # Verificar estado
Si todo funciona correctamente, el estado mostrará active. Para ver los registros:
journalctl -u mydaemon.service -e
Su función es escuchar en un puerto de red (normalmente 80 o 443), aceptar solicitudes HTTP/HTTPS, generar una respuesta (una página HTML, datos JSON, etc.) y enviarla de vuelta al cliente. En la mayoría de los casos, un servidor web se inicia con el sistema y continúa ejecutándose hasta que el servidor se apaga o se detiene manualmente (por ejemplo, systemctl stop nginx).
MySQL/MariaDB, PostgreSQL, MongoDB: todos son daemons. Se inician con el sistema y se ejecutan en segundo plano, aceptando solicitudes de aplicaciones cliente o servicios web. Estos daemons registran su actividad, admiten configuración mediante archivos y se gestionan con utilidades especiales (o systemd).
El daemon cron revisa la tabla de planificación (crontab) y ejecuta programas en los horarios o intervalos definidos por el usuario. Esto permite automatizar copias de seguridad, actualizaciones del sistema, verificaciones de estado y muchas otras tareas rutinarias.
atd es un daemon similar, pero ejecuta tareas solo una vez en un momento específico (a diferencia de cron, que las ejecuta regularmente).
sshd (Secure Shell Daemon) ofrece acceso remoto mediante el protocolo SSH. xrdp habilita conexiones de escritorio remoto utilizando el protocolo RDP. Actúa como un daemon que escucha conexiones de red en un puerto determinado.
En los sistemas modernos, el papel del “daemon principal” lo cumple systemd (que reemplaza al antiguo sistema SysV init). systemd es el primer proceso que se inicia después del kernel y se encarga de lanzar y gestionar todos los demás servicios y procesos. Los inicia en paralelo y maneja sus dependencias. En resumen, systemd es en sí mismo un daemon que “orquesta” a todos los demás en el sistema.
Ventajas:
Automatización: los daemons permiten automatizar el comportamiento del sistema, desde responder a solicitudes de red hasta programar tareas, sin intervención del usuario.
Aislamiento: al ejecutarse bajo cuentas de usuario o grupo separadas y desligarse del terminal, aumentan la seguridad al limitar los daños potenciales en caso de compromiso.
Operación continua: un daemon puede seguir prestando servicios (como un servidor web) sin interrupción, incluso si el usuario cierra sesión o la consola.
Manejabilidad: Linux ofrece herramientas del sistema (por ejemplo, systemd, scripts init) para gestionar todos los daemons de forma centralizada: iniciar, detener, reiniciar y registrar.
Desventajas:
Complejidad de depuración: dado que los daemons se ejecutan en segundo plano y no muestran salida en la consola, la depuración requiere registros detallados y configuraciones más complejas (banderas de depuración, trazas, etc.).
Riesgos de seguridad: si un daemon se ejecuta con privilegios elevados (por ejemplo, como root), cualquier vulnerabilidad puede comprometer el sistema completo. Es recomendable ejecutarlos con permisos limitados.
Gestión de dependencias: algunos daemons pueden fallar si, por ejemplo, necesitan acceso a la red antes de que esté disponible. Los sistemas init modernos resuelven esto, pero con los scripts clásicos SysV era un problema común.
Mayor uso de recursos: cualquier proceso en ejecución constante consume recursos del sistema (memoria, CPU). Si hay demasiados daemons, el rendimiento puede verse afectado, especialmente en sistemas con recursos limitados.
Conclusión
Los daemons son fundamentales en la arquitectura de los sistemas operativos Linux, ya que ofrecen amplias capacidades de automatización y servicios en segundo plano. Permiten a los administradores configurar de manera flexible operaciones de red, tareas programadas, registros, sistemas de seguridad y muchos otros componentes.
Escribir su propio daemon requiere comprender procesos, señales, llamadas al sistema y prestar especial atención al registro y la seguridad.
Los sistemas init modernos (especialmente systemd) han simplificado la gestión de daemons y la lógica de servicios, haciendo que la creación de servicios personalizados sea más estructurada y flexible. Sin embargo, sigue siendo un campo complejo que exige diseño cuidadoso, depuración y mantenimiento continuo.
Si busca una solución confiable, de alto rendimiento y económica para sus flujos de trabajo, Hostman le ofrece opciones de Hosting VPS Linux, incluidas Debian VPS, Ubuntu VPS y VPS CentOS.