Desvendando os Inits do Linux: systemd, OpenRC, Runit e s6 – Como criar e gerenciar seus próprios serviços

8 min

Um guia prático para dominar os inits no Linux e personalizar seus serviços com systemd, OpenRC, Runit e s6!

Quer ter controle total sobre seu Linux e automatizar tarefas como um profissional? Por trás da orquestra silenciosa que inicia seu sistema está o sistema de init — o maestro invisível que garante que tudo funcione perfeitamente desde o boot até o desligamento.

Compreender como o init funciona vai além da curiosidade técnica: permite resolver problemas, otimizar o desempenho da inicialização e, o mais poderoso, criar e controlar seus próprios serviços personalizados.

Neste guia, vamos desmistificar os principais sistemas de init (systemd, OpenRC, Runit e s6) e ensinar, passo a passo, como criar serviços próprios, tornando você o mestre do seu sistema Linux.

O que são sistemas de Init (e por pue eles existem)?

Um sistema de init é o primeiro processo iniciado pelo kernel após o boot e é responsável por iniciar, gerenciar e encerrar todos os demais processos do sistema. Em essência, ele é o “pai” de todos os processos.

Breve histórico:

  • SysVinit: O tradicional init baseado em scripts sequenciais.
  • systemd: Moderno, paralelo e o padrão de fato na maioria das distros.
  • OpenRC, Runit e s6: Alternativas leves, rápidas e flexíveis para usuários avançados.

Por que isso importa para você? Porque é com o init que você pode automatizar tarefas, iniciar programas no boot e resolver erros relacionados a serviços que não sobem corretamente.

systemd: O Gigante Moderno (e Mais Comum)

Filosofia

O systemd adota uma abordagem event-driven, com paralelização agressiva, foco em desempenho e centralização de funções (logging, temporizadores, rede, etc.). Além disso, temos o nosso guia sobre o comando systemd.

Gerenciamento básico

systemctl status nome_do_servico
systemctl start nome_do_servico
systemctl stop nome_do_servico
systemctl enable nome_do_servico
systemctl disable nome_do_servico
systemctl restart nome_do_servico
systemctl --user daemon-reload

Criando um serviço customizado com systemd

Crie um script para ser executado:

nano ~/meu-script.sh
#!/bin/bash
echo "Rodando meu serviço personalizado" >> ~/log-servico.txt
chmod +x ~/meu-script.sh

Depois, crie o serviço:

nano ~/.config/systemd/user/meu-servico.service
[Unit]
Description=Meu serviço customizado

[Service]
ExecStart=/home/usuario/meu-script.sh

[Install]
WantedBy=default.target

Ative o serviço:

systemctl --user daemon-reload
systemctl --user enable --now meu-servico.service
systemctl status mostrando servico rodando
Desvendando os Inits do Linux: systemd, OpenRC, Runit e s6 – Como criar e gerenciar seus próprios serviços 3

OpenRC: A alternativa tradicional e flexível

Filosofia

Baseado em scripts shell com funções start(), stop(), depend(). Muito usado em Gentoo e Artix.

Gerenciamento básico

rc-service nome_do_servico status
rc-service nome_do_servico start
rc-service nome_do_servico stop
rc-update add nome_do_servico default
rc-update del nome_do_servico default

Criando um serviço com OpenRC

O comando rc-service é usado em distribuições que usam OpenRC, como:

  • Alpine Linux
  • Gentoo
  • Void Linux (quando não usa runit)
nano /etc/init.d/meu-servico
#!/sbin/openrc-run
depend() {
    need net
}
start() {
    ebegin "Iniciando meu-servico.sh"
    /home/usuario/meu-script.sh
    eend $?
}
chmod +x /etc/init.d/meu-servico
rc-update add meu-servico default
rc-service meu-servico start

Runit e s6: Abordagens minimalistas e robustas

Filosofia

Ambos seguem a premissa “faça uma coisa e faça bem“, oferecendo inicialização rápida, supervisão constante e simplicidade.

Runit

Gerenciamento

sv status nome_do_servico
sv start nome_do_servico
sv stop nome_do_servico

Criando um Serviço

mkdir -p /etc/sv/meu-servico
nano /etc/sv/meu-servico/run
#!/bin/sh
exec /home/usuario/meu-script.sh
chmod +x /etc/sv/meu-servico/run
ln -s /etc/sv/meu-servico /var/service/

Nota: Esse link simbólico garante que o serviço seja iniciado no boot automaticamente. Caso você não tenha o diretório /var/service terá que criar com o comando sudo mkdir -p /var/service.

s6

Filosofia

O s6 é baseado em estruturas de diretórios, onde cada serviço é supervisionado por processos como s6-supervise, iniciado por s6-svscan.

  • s6-svscan: Scanner de serviços – monitora diretórios e inicia supervisores.
  • s6-supervise: Mantém o serviço em execução, reiniciando-o em caso de falha.

Criando um Serviço

mkdir -p ~/s6-servicos/meu-servico
nano ~/s6-servicos/meu-servico/run
#!/bin/sh
exec /home/usuario/meu-script.sh
chmod +x ~/s6-servicos/meu-servico/run

Importante: Para que o s6 supervisione seu serviço, o s6-svscan (o scanner principal de serviços do s6) precisa estar rodando e apontando para o diretório pai que contém seus serviços (ex: ~/s6-servicos/). A forma exata de iniciar e configurar o s6-svscan varia significativamente se o s6 é o sistema init principal do seu sistema ou se está sendo usado de forma mais isolada.

Solução de problemas comuns

  • Serviço não inicia: Verifique sintaxe e permissões. Para systemd, use journalctl -xe.
  • Conflitos de porta: Use lsof -i :porta ou netstat -tuln.
  • Erros genéricos: Consulte /var/log/syslog, dmesg ou logs específicos do init.

Conclusão: Você está próximo do controle total

Agora que você sabe criar e gerenciar seus próprios serviços em diferentes inits, seu domínio sobre o Linux passou para outro nível. Não importa qual distribuição use, o conhecimento que você adquiriu aqui te coloca entre os que realmente controlam o sistema.

Compartilhe nos comentários quais serviços você criou, ou se teve algum desafio — vamos aprender juntos!

Compartilhe este artigo