Apakah ada cara "standar" untuk membuat daemon di Debian?

17

Saya perlu membuat daemon dari aplikasi di Debian. Apakah ada alat standar untuk ini di Debian seperti "pemula" di Ubuntu? Saya hanya perlu perintah start-stop, untuk memulai program sebagai daemon dengan beberapa opsi dan file pid dan membunuhnya dengan file pid.

Saya melihat init.d tapi sepertinya ini untuk peluncuran boot-time. Saya ingin memulai daemon saya secara manual.

Kuroki Kaze
sumber
2
Perhatikan bahwa ini telah berubah untuk debian jessie, yang telah mengubah default dari sysvinit ke systemd.
Jules
debian jessie tampaknya memiliki beberapa bentuk kompatibilitas ke belakang, setidaknya menggunakan / usr / bin / service - jika tidak ada konfigurasi pemula (/etc/init/{service}.conf) dan ada konfigurasi sysvinit (/ etc / init. d / {service}), maka / usr / bin / service akan berinteraksi dengan /etc/init.d/{service} seperti sebelumnya di bawah sysvinit.
Kevin

Jawaban:

18

Anda dapat membuat daemon secara manual dengan mengikuti /etc/init.d/skeletonfile di Debian.

Anda dapat menggunakan /usr/bin/serviceuntuk meluncurkan $ sudo service yourdaemon startdan menghentikan $ sudo service yourdaemon stopdasmon Anda.

Selama Anda tidak menautkan skrip ke salah satu /etc/rc?.ddirektori, skrip itu tidak akan mulai saat startup.

Di sisi lain, Anda mungkin ingin melihat daemontools , yang tidak standar pada debian tetapi memiliki beberapa fitur menarik.

chmeee
sumber
Terima kasih. Sepertinya saya tidak memiliki /usr/bin/servicepada sistem saya (ini Debian Lenny), tetapi saya dapat memulai skrip langsung dengan /etc/init.d/myservice start.
Kuroki Kaze
3
Anda dapat menggunakan sudo invoke-rc.d yourservice startjuga
chmeee
tidak tahu itu. Thx
chiggsy
3

Debian (dan Ubuntu) memiliki program pembantu start-stop-daemonyang digunakan dalam skrip init. Ini memiliki beberapa opsi untuk memulai dan melacak daemon. Anda cukup menulis pembungkus di sekitarnya, mis

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
sumber
3
Saya lebih suka /etc/init.d/skeleton yang disarankan di atas, karena juga termasuk bagian INIT INFO yang membantu migrasi ke boot dependensi
dpavlin
2

Untuk melakukan daemonisasi proses untuk Debian dengan benar, Anda perlu mengambil beberapa langkah termasuk melepaskan diri dari proses pengendalian, mengatur ulang IO, dan membuat file proses id untuk dimainkan dengan baik. Anda bisa menggunakan sesuatu seperti program daemon dari paket dengan nama yang sama untuk melakukannya untuk Anda. Jika itu yang ingin Anda lakukan, jawabannya dapat ditemukan di sini di StackOverflow: /programming/3095566/linux-daemonize

Perintah pemula lebih mirip dengan perintah invian-rc.d Debian atau perintah layanan dari paket sysvinit-utils. Mereka berharap untuk bekerja dari skrip init di /etc/init.d. Merupakan standar pada Debian untuk membuat salah satu dari itu untuk paket Anda dan menggunakannya menggunakan program start-stop-daemon seperti yang Anda lihat pada contoh /etc/init.d/skeleton.

Hanya karena Anda membuat skrip /etc/init.d/myservice tidak berarti skrip harus mulai secara otomatis. Anda dapat menyesuaikan runlevel di mana ia berhenti dan mulai secara otomatis menggunakan alat seperti update-rc.d. Ini dijelaskan secara lebih rinci di Nonaktifkan layanan dari mulai dari semua runlevel?

jla
sumber