1. El sistema de inicialización del sistema (init): Este es el controlador principal. El sistema Init (por ejemplo, Systemd, Sysvinit, Runit) es responsable de comenzar, detener y administrar a Daemons. Se lee archivos de configuración (como `/etc/inittab` para archivos de la unidad Sysvinit o Systemd) que especifican qué demonios se debe iniciar en el tiempo de arranque y en qué condiciones. Los diferentes sistemas de inicio tienen diferentes métodos y filosofías de configuración.
2. Archivos de configuración: Estos archivos detallan qué demonios ejecutarán, sus parámetros de ejecución (como argumentos de línea de comandos), dependencias entre demonios (que deben comenzar antes que otros) y ejecutar niveles (sysvinit) o estados objetivo (systemd). Estas configuraciones definen el conjunto fundamental de demonios.
3. RunLevels/estados objetivo: (Principalmente relevantes para Sysvinit) Los diferentes niveles de ejecución representan diferentes estados del sistema (por ejemplo, modo de usuario único, modo multiusuario). El sistema Init carga un conjunto diferente de Daemons dependiendo del RunLevel activo. Systemd utiliza "objetivos" que son más flexibles y poderosos que RunLevels.
4. Dependencias entre demonios: Los demonios a menudo confían en que otros demonios estén activos. Por ejemplo, un demonio del servidor web podría depender de que se ejecute un demonio de red. El sistema Init asegura que se cumplan las dependencias antes de comenzar un demonio.
5. Servicios a pedido: Es posible que algunos demonios no se carguen en el momento del arranque, sino que comenzaron dinámicamente cuando sea necesario. Estos a menudo se desencadenan por solicitudes de usuario u otros eventos del sistema. Los servicios de red, por ejemplo, a menudo solo comienzan a escuchar en un puerto cuando se intenta una conexión.
6. Scripts de inicio automáticos: Algunas aplicaciones o paquetes de software instalan sus propios scripts de inicio que hacen que el sistema Init inicie demonios asociados con el arranque o según sea necesario.
7. Procesos iniciados por el usuario: Si bien no son estrictamente demonios en el sentido tradicional, los usuarios pueden iniciar procesos que se ejecutan en segundo plano, actuando efectivamente como demonios (aunque carecen de algunas de las características de los demonios adecuadamente diseñados).
8. Módulos del núcleo: Si bien no es estrictamente demonios, los módulos del núcleo (que extienden la funcionalidad del núcleo) pueden desencadenar la creación o modificación del comportamiento de Daemons. Una nueva interfaz de red podría requerir iniciar nuevos demonios relacionados con la red.
En resumen, no es un solo elemento, sino un esfuerzo de colaboración entre la configuración del sistema Init, su comprensión de las dependencias y posiblemente un inicio dinámico desencadenado por otros eventos que determinan el conjunto preciso de demonios que se ejecutan en cualquier sistema dado. La complejidad surge de la necesidad de administrar un conjunto diverso de servicios del sistema de manera eficiente y robusta.