Saat ini saya mengarahkan output alat pemantauan ke file, namun apa yang ingin saya lakukan adalah mengarahkan output ini ke file baru berdasarkan permintaan saya (menggunakan keybinding), tanpa menghentikan alat tersebut.
Sesuatu seperti
monitor_program | handle_stdout
Di mana handle_stdout
memungkinkan saya untuk menentukan file baru tempat meletakkan log pada titik tertentu.
Saya tahu saya bisa dengan mudah menulisnya, tetapi saya bertanya-tanya apakah ada alat yang sudah memungkinkan ini.
bash
pipe
io-redirection
stdout
Treviño
sumber
sumber
logrotate
dengan file konfigurasi kustom secara manual, tergantung pada perilaku monitor_program Anda, tetapi itu agak meretas.Jawaban:
Saya akan menyarankan pipa bernama.
Buat pipa
mkfifo p
(sebut saja apa pun yang Anda inginkan, jika tidak 'p')Buat skrip "pembaca" yang membaca dari pipa dan menulis di mana pun Anda suka
Beri tahu program pemantauan untuk menulis log-nya ke pipa bernama
Berikut ini skrip pembaca sampel yang membaca dari pipa bernama 'p' dan menulis data ke file 'mylog' yang diindeks:
sumber
read
danprintf
bukannya adilcat <p >> mylog."$INDEX"
?Membangun ide SIGINT Anda, di sini menggunakan SIGQUIT ( Ctrl+\) yang dapat Anda gunakan Ctrl+Cuntuk menghentikan semuanya:
Itu mengasumsikan
cat
bukan builtin di shell Anda (jadi itu bisa terganggu oleh Anda menekan Ctrl+\).Perhatikan bahwa seperti dalam pendekatan Anda, ada kemungkinan bahwa SIGQUIT dikirimkan pada waktu yang salah (dalam panggilan sistem tulis) menyebabkan beberapa data hilang.
sumber
Anda mungkin bisa menggunakan
less
dan menyimpan dari sana dengan mengetikkan snama file yang ingin Anda simpan, lalu Enter. Dari Bagaimana cara saya menulis semua baris dari kurang ke file? .sumber
Tanpa mengetahui lebih lanjut tentang "permintaan" Anda, tidak mungkin untuk menjawab. Jika didasarkan pada ukuran atau interval file, maka rotatelogs (yang seharusnya dibundel dengan Apache httpd) akan berfungsi.
sumber
Berkat jawaban Jeff Schaller , saya berakhir dengan sesuatu seperti ini, yang pada dasarnya melakukan apa yang saya butuhkan, sebut saja
reader.sh
:Maka itu hanya tentang membuat pipa bernama
mkfifo p
, dan menggunakan dua terminal di manamonitor_program > p
danreader.sh
sedang berjalan. Saya kemudian dapat menghentikan pembaca untuk mengatur log baru dengan menggunakan Ctrl+ C, dan memasukkan nama baru. Ctrl+ Z, seperti biasa lalu berhenti dan bunuh.sumber