Saat ini saya sedang menjalankan program konsol server di layar karena saya harus membacanya dan sesekali mengirim perintah.
Saya ingin menjalankan aplikasi sebagai daemon di latar belakang (mulai / hentikan dengan init).
Saya dapat tail -f
log, tetapi itu tidak akan membiarkan saya mengirim input ke proses.
Apakah ada cara untuk mengatur ini sehingga saya bisa membaca dan mengirim input, tetapi masih menjalankannya di latar belakang?
Saya juga ingin dapat mengirim input ke daemon dari proses yang berbeda juga (skrip shell yang dapat mengirim perintah "Stop \ n", misalnya).
scripting
shell-script
tail
Bill K.
sumber
sumber
Jawaban:
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).
Dan cukup tulis perintah ke pipa:
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.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 tahutail
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 mematikantail
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
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 diberikandaemon.screenrc
denganlogfile
arahan.sumber
stuff
perintah layar ). Tetapi Anda tidak perlu overhead (pemrosesan, tetapi yang paling penting kognitif) dari terminal di sini, pipa hampir cukup (cukup dengan sedikit proses relay pengabaian file-end). Anda mungkin ingin bereksperimen sedikit dengan<fifo cat
atau<fifo tail -f | cat
di satu terminal danecho >fifo; echo >fifo
di terminal lain; Saya pikir kamu akan baik-baik saja.