Existe uma maneira "padrão" de criar daemon no Debian?

17

Eu preciso criar um daemon a partir do aplicativo no Debian. Existe alguma ferramenta padrão para isso no Debian como "upstart" no Ubuntu? Eu preciso apenas de comandos start-stop, para iniciar um programa como um daemon com algumas opções e um arquivo pid e matá-lo com o arquivo pid.

Eu olhei para init.d, mas parece que estes são para o lançamento no momento da inicialização. Quero iniciar meu daemon manualmente.

Kuroki Kaze
fonte
2
Note que isso mudou para o debian jessie, que mudou o padrão de sysvinit para systemd.
Jules
O debian jessie parece ter alguma forma de compatibilidade com versões anteriores, pelo menos usando / usr / bin / service - se não houver uma configuração inicial (/etc/init/{service}.conf) e houver uma configuração sysvinit (/ etc / init. d / {service}), então / usr / bin / service irá interagir com /etc/init.d/{service} como anteriormente em sysvinit.
Kevin

Respostas:

18

Você pode criar seu daemon manualmente seguindo o /etc/init.d/skeletonarquivo no Debian.

Você pode usar /usr/bin/servicepara iniciar $ sudo service yourdaemon starte interromper $ sudo service yourdaemon stopseu daemon.

Contanto que você não vincule seu script a nenhum dos /etc/rc?.ddiretórios, ele não será iniciado na inicialização.

Por outro lado, você pode querer olhar para daemontools , que não é padrão no debian, mas possui alguns recursos interessantes.

chmeee
fonte
Obrigado. Parece que não tenho /usr/bin/serviceno meu sistema (é o Debian Lenny), mas posso iniciar scripts diretamente com /etc/init.d/myservice start.
precisa saber é o seguinte
3
Você pode usar sudo invoke-rc.d yourservice startbem
chmeee
não sabia isso. Thx
chiggsy
3

O Debian (e Ubuntu) tem o programa auxiliar start-stop-daemonque é usado nos scripts init. Ele tem algumas opções para iniciar e rastrear daemons. Você pode simplesmente escrever um invólucro em torno dele, por exemplo

case $1 in
start) start-stop-daemon --start --exec /my/exec/prog --pidfile /my/pid/file --background
       ;;
stop)  start-stop-daemon --stop --pidfile /my/pid/file 
       ;;
esac
Dan Andreatta
fonte
3
Eu preferiria /etc/init.d/skeleton sugerido acima, porque inclui também peças INIT INFORMAçõES que ajuda com a migração para a inicialização dependência
dpavlin
2

Para daemonizar adequadamente um processo para o Debian, você precisará executar várias etapas, incluindo desviar-se do processo de controle, redefinir a IO e criar um arquivo de identificação do processo para ser agradável. Em vez disso, você pode usar algo como o programa daemon do pacote com o mesmo nome para fazer isso por você. Se é isso que você queria fazer, a resposta pode ser encontrada aqui no StackOverflow: /programming/3095566/linux-daemonize

O comando upstart é mais parecido com o comando invoke-rc.d do Debian ou o comando service do pacote sysvinit-utils. Eles esperam trabalhar com scripts init em /etc/init.d. É padrão no Debian criar um desses para o seu pacote e usar o programa start-stop-daemon como você pode ver no exemplo /etc/init.d/skeleton.

Só porque você cria um script /etc/init.d/myservice não significa que ele precisa ser iniciado automaticamente. Você pode ajustar os níveis de execução nos quais para e inicia automaticamente usando uma ferramenta como update-rc.d. Isso é descrito em mais detalhes em Desativar a inicialização de um serviço em todos os níveis de execução?

jla
fonte