Para começar, seu produto não deve usar rc.local
em todos os . rc.local
é para o administrador do sistema mexer com; eles podem fazer o que quiserem (contanto que saia com sucesso). Isso torna a edição complicada, na melhor das hipóteses.
Agora, qual você deve usar? A resposta é simples.
Todos eles.
Um sistema usa um único sistema init a qualquer momento. Se você fornecer configuração para todos eles, o que for mais compatível com o que estiver em execução será usado automaticamente.
Uma visão geral rápida
init do System V
- Tanto o Upstart quanto o systemd suportam estes, para que você possa escrever scripts de init sysv e fazer com que funcionem em qualquer lugar.
- Esse sistema init faz apenas uma coisa: chame seu script com um parâmetro apropriado. Todo o resto - rastreando os processos iniciados, alterando usuários, definindo o ambiente, etc., deve ser feito no seu script. Isso torna o método de script init frágil se você não for bom em scripts (scripts geralmente são scripts de shell, mas suponho que possa ser outra coisa). Algumas funções padrão são fornecidas por conveniência, locais que variam de distro a distro.
- O pedido de scripts de inicialização é feito com base em nomes de arquivos e presença nos vários diretórios
/etc/rc*
e nos cabeçalhos de comentários especiais .
Upstart (≤ 14,04)
- Baseado em eventos. Torna possível que o seu trabalho espere que um determinado evento aconteça (sistemas de arquivos montados, rede) antes de começar.
- Infelizmente, a implementação do Upstart dificulta o uso de configurações de inicialização mais complexas. Além disso, é difícil inserir seu trabalho na cadeia de dependência de outro trabalho após o fato.
systemd (≥ 16.04)
- baseado em dependência. Unidades são iniciadas quando necessário. Consulte Systemd para usuários do Upstart para obter mais informações. O init padrão atual nos sistemas baseados em Debian, Ubuntu e RHEL.
- A abordagem baseada em cgroups do Systemd para rastrear processos é a mais confiável. Isso dificulta que os processos escapem de um determinado contexto (de segurança) ou limitação de recursos.
- Os administradores podem facilmente substituir a configuração do init sem pisar nos dedos do mantenedor do pacote.
Tanto o Upstart quanto o systemd têm claras vantagens sobre o sysv init. Ambos são mais declarativos do que imperativos, com suporte embutido para várias tarefas envolvidas no gerenciamento de serviços. Você deve usar o sistema de inicialização mais moderno disponível em qualquer versão suportada.