O sistema SysInit existente trataria disso muito bem. O Ubuntu tem documentos sobre o que eles estão fazendo com eles. Sim, eles estão mudando para upstart .
Eu tenho alguns servidores no meu Ubuntu que precisam ser daemonized à prova de reinicialização. Como posso fazer isso com o primeiro processo genérico do init? Devo trocar para upstart ou algum outro substituto?
O sistema SysInit existente trataria disso muito bem. O Ubuntu tem documentos sobre o que eles estão fazendo com eles. Sim, eles estão mudando para upstart .
Se os seus programas estiverem sendo executados em primeiro plano, sugiro Runit , que é um substituto para os já mencionados daemontools e também é um substituto para o init no estilo Sys-V. No Ubuntu, o Runit está disponível como um pacote e tem os scripts necessários para serem iniciados na inicialização do sistema pelo Upstart.
Usamos o Runit para todos os pacotes não instalados no sistema, como aplicativos Rails, para que não tenhamos que gerenciar scripts de inicialização; nós apenas colocamos o comando startup no script 'run' apropriado, e deixamos ir. Isso simplifica a implantação de novos programas arbitrários que precisam ser iniciados no momento da inicialização e é um sistema muito robusto e confiável, evitando a necessidade de gerenciar PID e arquivos de bloqueio, já que o Runit lida com isso.
Daemontools é absolutamente incrível para esse tipo de coisa. O KISS-grade é simples, robusto e incentiva boas práticas em áreas relacionadas (registro, etc.).
Você pode usar o xinetd para isso, se o processo for baseado em rede. Caso contrário, o upstart e o sysvinit são suas ferramentas.
daemonize: www.clapper.org/software/daemonize/ pode lidar com isso envolvendo seu código em um wrapper C que daemoniza antes de executar.
Você também pode simplesmente adicioná-los ao / etc / inittab. Muitos vão (talvez com razão) dizer que isso é mal porque ninguém vai pensar em olhar para lá, eu vi sistemas de produção que usam essa técnica e a verdade é que funciona bem.
Talvez você possa ver também o monit, pode certificar-se de que os processos estão sendo executados e reiniciá-los, se necessário. Foi construído com o ambiente Linux-HA em mente.
Normalmente, faço um novo script de inicialização para cada novo processo, mas normalmente não implante 4 ou 5 scripts de uma só vez. Talvez pense em como eles são estruturados e os coloque em um script de inicialização, que é o serviço que eles fornecem.
"@ reboot" é uma macro válida no daemon cron padrão do Ubuntu (vixie-cron 4.x se bem me lembro). Então, lançar um daemon pode ser tão simples quanto
crontab -e
@reboot /usr/local/bin/daemon
Isso fará com que seu daemon apareça após uma reinicialização, mas presumirá que seu daemon não morra por conta própria. Você também pode fazer uso de "keep-one-running", que eu acho que vai ser um pacote padrão incluído a partir de 11.10 ("@reboot / usr / bin / keep-one-running / usr / local / bin / daemon" ).
edite - ah, pergunta antiga que reapareceu na guia ativa por qualquer motivo ...