O que é um daemon na computação?
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.
O que é um daemon Copiar link
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.
Principais características de um daemon
-
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.
Daemons no Linux Copiar link
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).
Como criar e gerenciar daemons Copiar link
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,stdoutestderrsã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.
1. Escrever o daemon em C
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;
}
2. Compilar o programa
Primeiro, atualize seus pacotes:
sudo apt update && sudo apt upgradeInstale o compilador GCC, se ainda não estiver instalado:
sudo apt install gccCompile o daemon:
gcc mydaemon.c -o mydaemon3. Mover o executável
Mova o binário para /usr/local/bin/, um local padrão para utilitários personalizados:
mv mydaemon /usr/local/bin/mydaemon4. Criar um serviço systemd
Crie um arquivo de unidade chamado mydaemon.service:
sudo nano /etc/systemd/system/mydaemon.serviceInsira 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.
5. Iniciar e monitorar o daemon
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 -eExemplos de uso de daemons Copiar link
- Servidores web
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).
- Daemons de banco de dados
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).
- Agendadores de tarefas (cron, atd)
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).
- Access and Control Services (sshd, xrdp)
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.
- Init System Daemons (systemd, init, Upstart)
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 e desvantagens dos daemons Copiar link
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
systemde 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.
Conclusão Copiar link
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.