O termo daemon vem da mitologia grega antiga e referia-se a um ser imaterial que influenciava o mundo humano.
Na computação, especialmente em sistemas operacionais do tipo UNIX, um daemon é um processo em segundo plano que é executado sem interação direta do usuário. Ele não depende de um terminal ou interface gráfica e geralmente é iniciado junto com o sistema ou sob certas condições.
A principal função de um daemon é fornecer serviços específicos a outros processos ou usuários. Por exemplo, um daemon pode escutar portas de rede aguardando conexões, monitorar eventos do sistema e reagir quando determinadas condições são atendidas, gerenciar tarefas agendadas (como o cron), enviar e-mails (sendmail) e muito mais.
No Windows, o equivalente mais próximo de um daemon é um serviço (Service). A diferença está principalmente em como eles são iniciados, registrados, gerenciados e configurados dentro do sistema operacional. No entanto, o objetivo é o mesmo: garantir a operação contínua em segundo plano de certas funções ou serviços.
Executa em segundo plano: normalmente, o usuário não vê nenhuma interface do daemon; ele não escreve na saída padrão (ou a redireciona para logs) e não solicita entrada de teclado.
Autônomo: um daemon é iniciado na inicialização do sistema, quando é acionado por um sistema init (como o systemd), ou manualmente pelo usuário (via scripts, cron, etc.).
Longa duração: idealmente, um daemon é executado indefinidamente, a menos que ocorra um erro crítico ou ele receba um sinal de parada explícito.
Isolado: normalmente é executado sob uma conta de usuário ou grupo separado, com privilégios limitados, o que torna os serviços mais seguros e fáceis de gerenciar.
Registro: em vez de usar entrada/saída padrão, os daemons gravam informações em arquivos de log ou no registrador do sistema (journald, syslog, etc.), o que é útil para depuração e diagnóstico.
Historicamente, quase todas as tarefas de segundo plano do sistema no Linux são implementadas como daemons. O sistema operacional inclui dezenas deles, cada um responsável por uma função específica. Alguns exemplos:
sshd (Secure Shell Daemon): escuta na porta 22 (por padrão) e permite que usuários remotos se conectem via SSH criptografado. Sem o sshd, o acesso remoto ao terminal seria praticamente impossível.
cron: um daemon de agendamento de tarefas. Ele verifica as entradas do crontab e executa scripts ou comandos em horários definidos, como limpeza de logs, envio de relatórios, verificações do sistema, etc.
syslogd / rsyslog / journald: daemons de registro do sistema que coletam mensagens do kernel, utilitários, outros daemons e aplicativos, salvando-as em arquivos de log ou no journal.
NetworkManager ou Wicd: daemons que gerenciam configurações de rede — automatizando conexões com redes com ou sem fio, alternância entre redes, configuração de VPNs e muito mais.
Esses daemons são iniciados junto com o sistema e registrados no gerenciador de serviços (por exemplo, systemd). Eles permanecem em execução até que o sistema seja desligado ou reiniciado. Os usuários interagem com eles indiretamente — por meio de arquivos de configuração, comandos de terminal (service, systemctl) ou solicitações de rede (se o daemon fornecer uma interface HTTP/S, SSH ou outra).
Para implementar um daemon, siga estas etapas:
Criação do processo (fork): o processo pai chama fork() e continua a execução do código do daemon no processo filho.
Desvincular do terminal de controle (setsid): para evitar interferência do usuário (por exemplo, fechar o terminal), o daemon chama setsid() para iniciar uma nova sessão e tornar-se o líder dela.
Fechar descritores de entrada/saída padrão: como o daemon não deve escrever na tela nem aguardar entrada, stdin, stdout e stderr são fechados ou redirecionados para arquivos de log.
Tratar sinais e registros: para permitir um desligamento limpo ou recarregamento de configuração, o daemon deve tratar sinais (SIGTERM, SIGHUP, etc.). O registro normalmente é feito via syslog ou arquivos.
Loop principal: após a inicialização, o daemon entra em seu loop principal: aguarda eventos, os trata e repete até ser interrompido.
Vamos ver como criar um daemon no Ubuntu 22.04 usando um servidor em nuvem da Hostman.
Crie um arquivo chamado mydaemon.c e insira o seguinte 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");
// Loop infinito principal
while (1) {
// Suas tarefas em segundo plano: monitoramento, filas, etc.
syslog(LOG_NOTICE, "Performing task...");
sleep(60);
}
// Se o loop for encerrado
syslog(LOG_NOTICE, "Daemon stopped");
closelog();
return 0;
}
Primeiro, atualize seus pacotes:
sudo apt update && sudo apt upgrade
Instale o compilador GCC, se ainda não estiver instalado:
sudo apt install gcc
Compile o daemon:
gcc mydaemon.c -o mydaemon
Mova o binário para /usr/local/bin/, um local padrão para utilitários personalizados:
mv mydaemon /usr/local/bin/mydaemon
Crie um arquivo de unidade chamado mydaemon.service:
sudo nano /etc/systemd/system/mydaemon.service
Insira o seguinte conteúdo:
[Unit]
Description=My Daemon
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mydaemon
Restart=on-failure
[Install]
WantedBy=multi-user.target
Explicação dos campos:
Description: descrição exibida no systemctl status.After=network.target: garante que o daemon inicie após a rede estar ativa.Type=simple: o daemon não cria subprocessos, é executado como um único processo.ExecStart: caminho para o executável do daemon.Restart=on-failure: reinicia automaticamente se o daemon falhar.WantedBy=multi-user.target: faz o serviço iniciar no ambiente multiusuário padrão.sudo systemctl daemon-reload # Recarregar configuração do systemd
sudo systemctl start mydaemon # Iniciar o daemon
sudo systemctl status mydaemon # Verificar status
Se tudo estiver funcionando, o status mostrará active. Para visualizar os logs:
journalctl -u mydaemon.service -e
Sua função é escutar em uma porta de rede (geralmente 80 ou 443), aceitar solicitações HTTP/HTTPS, gerar uma resposta (como uma página HTML, dados JSON etc.) e enviá-la de volta ao cliente. Na maioria dos casos, um servidor web é iniciado com o sistema e permanece em execução até o desligamento ou execução de um comando de parada (por exemplo, systemctl stop nginx).
MySQL/MariaDB, PostgreSQL, MongoDB — todos são daemons. Eles são iniciados com o sistema e continuam rodando em segundo plano, aceitando solicitações de aplicativos clientes ou serviços web. Esses daemons registram atividades, suportam configuração por arquivos e são gerenciados por utilitários específicos (ou systemd).
O daemon cron verifica a tabela de agendamentos (crontab) e executa programas nos horários ou intervalos definidos pelo usuário. Isso permite automatizar backups, atualizações do sistema, verificações de integridade e muitas outras tarefas rotineiras.
O atd é um daemon semelhante, mas executa tarefas apenas uma vez em um horário específico (diferente do cron, que as executa regularmente).
sshd (Secure Shell Daemon) fornece acesso remoto via protocolo SSH. xrdp permite conexões de desktop remoto usando o protocolo RDP. Ele atua como um daemon que escuta conexões de rede em uma porta específica.
Nos sistemas modernos, o papel do “daemon principal” é desempenhado pelo systemd (que substitui o antigo sistema SysV init). O systemd é o primeiro processo a ser iniciado após o kernel e é responsável por inicializar e gerenciar todos os outros serviços e processos. Ele os inicia em paralelo e gerencia suas dependências. Em resumo, o systemd é ele próprio um daemon que “orquestra” todos os outros do sistema.
Vantagens:
Automação: os daemons permitem automatizar o comportamento do sistema — desde responder a solicitações de rede até agendar tarefas — sem intervenção do usuário.
Isolamento: por rodarem sob contas ou grupos separados e desvinculados do terminal, aumentam a segurança, limitando possíveis danos em caso de comprometimento.
Operação contínua: um daemon pode continuar prestando serviços (como um servidor web) sem interrupções, mesmo que o usuário saia ou feche o console.
Facilidade de gerenciamento: o Linux oferece ferramentas de sistema (como systemd e scripts init) para gerenciar todos os daemons de forma centralizada — iniciar, parar, reiniciar e registrar.
Desvantagens:
Complexidade de depuração: como os daemons rodam em segundo plano e não exibem saída no console, a depuração requer logs detalhados e configurações mais complexas (flags de debug, rastreamento, etc.).
Riscos de segurança: se um daemon for executado com privilégios elevados (por exemplo, como root), qualquer vulnerabilidade pode comprometer todo o sistema. É melhor executá-los com contas limitadas.
Gerenciamento de dependências: alguns daemons podem falhar se precisarem de acesso à rede antes que ela esteja ativa. Os sistemas init modernos resolvem isso, mas nos scripts SysV clássicos isso era comum.
Maior consumo de recursos: qualquer processo em execução contínua consome recursos do sistema (memória, CPU). Muitos daemons simultâneos podem impactar o desempenho, especialmente em sistemas com recursos limitados.
Os daemons são uma parte essencial da arquitetura dos sistemas operacionais Linux, oferecendo amplas capacidades de automação e serviços em segundo plano. Eles permitem que administradores configurem de forma flexível operações de rede, tarefas agendadas, logs, segurança e muito mais.
Escrever seu próprio daemon requer compreensão de processos, sinais, chamadas de sistema e atenção especial ao registro e à segurança.
Os sistemas init modernos (especialmente o systemd) simplificaram a gestão de daemons e a lógica de serviços, tornando a criação de serviços personalizados mais estruturada e flexível. No entanto, ainda é um campo complexo que exige design cuidadoso, depuração e manutenção contínua.
Se você busca uma solução confiável, de alto desempenho e econômica para seus fluxos de trabalho, a Hostman oferece opções de hospedagem VPS Linux, incluindo Debian VPS, Ubuntu VPS e VPS CentOS.