Baca dari pipa, tulis ke file
Jika Anda ingin daemon membaca input yang dihasilkan oleh beberapa proses sewenang-wenang, Anda perlu menghubungkan proses itu ke sebuah pipa. Di sini proses sewenang-wenang adalah Anda mengulangi perintah, dan itu akan berjalan dalam konteks yang berbeda. Jadi buatlah pipa bernama (sering disebut fifo dalam konteks unix).
mkfifo /var/run/daemon.fifo
</var/run/daemon.fifo /path/to/daemond --option >daemon.log
Dan cukup tulis perintah ke pipa:
echo 'FORWARD 10' >/var/run/daemon.fifo
echo 'LEFT 72' >/var/run/daemon.fifo
Ini tidak mungkin berfungsi sebagaimana adanya: ada kemungkinan besar bahwa daemon akan keluar ketika melihat akhir file pada input standarnya, yang terjadi segera setelah proses pertama yang menulis ke pipa berakhir. Anda dapat menggunakan tail -f
untuk menghindari masalah itu.
</var/run/daemon.fifo tail -c +1 -f | {
echo $$ >/var/run/daemon.pid
exec /path/to/daemond --option >daemon.log
}
Dengan beberapa tail
implementasi, Anda dapat digigit dengan buffering: tail
proses akan menunggu sampai ia telah mengumpulkan cukup byte untuk memancarkan beberapa output. Saya tidak berpikir ini bisa dipecahkan dalam kotak alat POSIX; jika itu masalah, gunakan program C atau Perl atau Python yang sepele. Sejauh yang saya tahu tail
dari GNU coreutils (seperti yang ditemukan di Linux dan di tempat lain) aman dalam hal ini.
Ketika Anda menghentikan daemon, echo >/var/run/daemon.fifo
akan mematikan tail
prosesnya.
Mulai program di dalam layar
Alih-alih memanggil daemon langsung dari manajer layanan Anda (apakah Anda benar-benar hanya menggunakan SysV init, atau sesuatu tambahan seperti skrip pembungkus atau Pemula?), Panggil
screen -c daemon.screenrc -L -d -m -S daemon_name /path/to/daemond --option
Karena daemon tidak akan menjadi proses anak dari manajer layanan, Anda perlu memastikan untuk mengirim sinyal ke proses yang benar. Cara melakukannya tergantung pada bagaimana tepatnya daemon dimulai dan oleh apa.
Secara teknis dimungkinkan untuk melampirkan proses yang sedang berjalan ke terminal, tetapi ada risiko Anda akan crash program, jadi ini jelas untuk sistem produksi.
The -L
pilihan membuat layar menulis segala sesuatu yang muncul di jendela untuk file. Nama file diberikan daemon.screenrc
dengan logfile
arahan.