Saya menulis skrip shell yang ingin saya jalankan sebagai daemon pada startup tanpa menggunakan alat eksternal seperti daemontools atau daemonize .
Linux Daemon Writing HOWTO
Menurut Linux Daemon Writing HOWTO , daemon yang tepat memiliki karakteristik sebagai berikut:
- garpu dari proses induk
- menutup semua file deskriptor (yaitu,
stdin
,stdout
,stderr
) - membuka log untuk penulisan (jika dikonfigurasi)
- mengubah direktori kerja menjadi yang persisten (biasanya
/
) - mengatur ulang mode file mask (umask)
- membuat ID Sesi unik (SID)
daemonize Pendahuluan
The daemonize Pendahuluan berjalan lebih jauh, yang menyatakan bahwa daemon khas juga:
- terlepas dari terminal kontrolnya (jika ada) dan mengabaikan semua sinyal terminal
- terlepas dari kelompok prosesnya
- menangani
SIGCLD
Bagaimana saya melakukan semua ini dalam sh
, dash
atau bash
naskah dengan alat Linux umum saja?
Skrip harus dapat dijalankan pada sebanyak mungkin distro tanpa perangkat lunak tambahan, meskipun Debian adalah fokus utama kami.
CATATAN: Saya tahu ada banyak jawaban di jaringan StackExchange yang merekomendasikan penggunaan nohup
atau setsid
, tetapi tidak satu pun dari metode ini yang menangani semua persyaratan di atas.
EDIT: Halaman daemon (7) juga memberikan beberapa petunjuk, meskipun tampaknya ada beberapa perbedaan antara SysV
daemon gaya lama dan yang lebih baru systemd
. Karena kompatibilitas dengan berbagai distro penting, harap pastikan jawabannya memperjelas perbedaan.
daemon
dan hal-hal lain untuk menjalankan skrip shell sewenang-wenang tanpa ketentuan untuk menjalankan sebagai sebuah daemon. Karena Anda penulis, sepenuhnya mengendalikan bagaimana skrip itu ditulis, buatlah sehingga skrip tersebut dapat diluncurkan dari systemd unitfile atau skrip rc.d. Anda tidak menentukan "Proper"!