Esiste un modo "standard" per creare un demone in Debian?


17

Devo creare un demone dall'applicazione in Debian. Esiste uno strumento standard per questo in Debian come "upstart" in Ubuntu? Ho solo bisogno di comandi start-stop, per avviare un programma come demone con alcune opzioni e un file pid e ucciderlo con un file pid.

Ho guardato init.d ma sembra che questi siano per l'avvio all'avvio. Voglio avviare il mio demone manualmente.


2
Si noti che questo è cambiato per debian jessie, che ha cambiato l'impostazione predefinita da sysvinit a systemd.
Jules

debian jessie sembra avere una qualche forma di compatibilità con le versioni precedenti, almeno usando / usr / bin / service - se non c'è una configurazione iniziale (/etc/init/{service}.conf) e c'è una configurazione sysvinit (/ etc / init. d / {service}), quindi / usr / bin / service interagirà con /etc/init.d/{service} come prima in sysvinit.
Kevin,

Risposte:


18

Puoi creare il tuo demone manualmente seguendo il /etc/init.d/skeletonfile su Debian.

È possibile utilizzare /usr/bin/serviceper avviare $ sudo service yourdaemon starte arrestare $ sudo service yourdaemon stopil demone.

Se non colleghi lo script a nessuna delle /etc/rc?.ddirectory, non verrà avviato all'avvio.

D'altra parte, potresti voler guardare i demonoli , che non sono standard su debian ma hanno alcune caratteristiche interessanti.


Grazie. Sembra che non abbia /usr/bin/servicesul mio sistema (è Debian Lenny), ma posso iniziare gli script direttamente con /etc/init.d/myservice start.
Kuroki Kaze,

3
È possibile utilizzare sudo invoke-rc.d yourservice startcome pure
chmeee

non lo sapevo. Thx
Chiggsy,

3

Debian (e Ubuntu) hanno il programma helper start-stop-daemonche viene usato negli script init. Ha alcune opzioni per avviare e tenere traccia dei demoni. Puoi semplicemente scrivere un involucro attorno ad esso, ad es

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

3
Preferirei /etc/init.d/skeleton suggerito sopra, perché include anche parti INIT INFO che aiutano con la migrazione all'avvio delle dipendenze
dpavlin,

2

Per demonizzare correttamente un processo per Debian dovrete fare diversi passi tra cui il passaggio dal processo di controllo, il ripristino di I / O e la creazione di un file ID processo per far funzionare bene. Puoi invece usare qualcosa come il programma demone dal pacchetto con lo stesso nome per farlo per te. Se è quello che volevi fare, la risposta può essere trovata qui su StackOverflow: /programming/3095566/linux-daemonize

Il comando upstart è più simile al comando invoke-rc.d di Debian o al comando di servizio dal pacchetto sysvinit-utils. Si aspettano di lavorare fuori dagli script di init in /etc/init.d. In Debian è standard crearne uno per il proprio pacchetto e farlo usare il programma start-stop-daemon come si può vedere nell'esempio /etc/init.d/skeleton.

Solo perché crei uno script /etc/init.d/myservice non significa che debba avviarsi automaticamente. È possibile regolare i runlevel a cui si ferma e si avvia automaticamente utilizzando uno strumento come update-rc.d. Questo è descritto più dettagliatamente in Disabilitare un servizio a partire da tutti i runlevel?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.