Ok, ini kasus penggunaan yang sangat praktis dari sudut pandang saya.
Katakanlah saya punya oneliner shell sederhana yang tidak mencatat output ke file. Ini bisa berupa apa saja, misalnya tcpdump. Apakah ada cara umum dan sepele, untuk memastikan, bahwa file output tidak akan melebihi ukuran yang diberikan?
Resoning di balik ini, adalah untuk melindungi dari mengisi seluruh ruang yang tersedia di mount point karena kesalahan. Jika saya lupa tentang skrip, atau akan menghasilkan GB data per jam, maka tugas debugging sederhana ini dapat menyebabkan potensi crash sistem.
Sekarang, saya mengetahui opsi-opsi yang dibangun di beberapa alat (seperti kombinasi -W / -C di tcpdump). Yang saya butuhkan adalah failafe yang sangat umum.
Singkat cerita - ketika saya menjalankan skrip seperti:
% this -is --my=very|awsome|script >> /var/tmp/output.log
Bagaimana memastikan bahwa output.log tidak akan pernah menjadi lebih besar dari 1GB.
Script bisa crash, terbunuh atau apa pun.
Solusi yang saya cari harus mudah dan sederhana, hanya menggunakan alat yang tersedia di distro populer seperti ubuntu / debian / fedora. Secara umum sesuatu tersedia secara luas. Rumitnya, program multiline bukanlah opsi di sini terlepas dari bahasa / teknologi.
tail -c 1G
juga berfungsi, berguna untuk melihat bagian ujung suatu peristiwa. Maklum itu memerah setelah perintah berakhir.Tetapkan ukuran file maksimum untuk pengguna yang hanya akan digunakan untuk menjalankan skrip ini.
File
/etc/security/limits
membatasi pengguna dengan nilai "default" kecuali ada nilai eksplisit untuk pengguna tertentu. Nilai spesifik pengguna ini akan menimpa nilai default. File mungkin memiliki nama yang sedikit berbeda tergantung pada OS Anda.Jika pengguna log Anda bernama log_maker, kemudian tambahkan baris ini ke file:
log_maker hard fsize 1000000
Jumlah setelah fsize adalah ukuran file maksimum dalam KB.
sumber
curtail membatasi ukuran output program dan mempertahankan output X KB terakhir dengan perintah berikut:
run_program | curtail -s 1G myprogram.log
https://github.com/Comcast/Infinite-File-Curtailer
CATATAN: Saya adalah pengelola repo di atas. Hanya berbagi solusinya ...
sumber
Anda dapat membatasi file apa pun dengan
Menulis ekor langsung ke file yang sama membuat file kosong. Jadi, Anda perlu menggunakan file sementara.
sumber