Cách dễ dàng để giới hạn kích thước tệp (thiết bị xuất chuẩn) ở cấp độ kịch bản lệnh shell?


10

Ok, đây là một trường hợp sử dụng rất thực tế theo quan điểm của tôi.

Giả sử tôi có một trình điều khiển shell đơn giản nào đó ghi nhật ký đầu ra vào một tệp. Điều này có thể đơn giản là bất cứ điều gì, ví dụ như tcpdump. Có cách nào chung chung và tầm thường, để đảm bảo rằng tệp đầu ra sẽ không vượt quá kích thước đã cho không?

Thay đổi kích thước đằng sau này, là để bảo vệ khỏi việc lấp đầy toàn bộ không gian có sẵn trên điểm gắn kết do nhầm lẫn. Nếu tôi quên tập lệnh, hoặc nó sẽ mang lại GB dữ liệu mỗi giờ, thì tác vụ gỡ lỗi đơn giản này có thể dẫn đến sự cố hệ thống tiềm ẩn.

Bây giờ, tôi nhận thức được các tùy chọn xây dựng trong một số công cụ (như kết hợp -W / -C trong tcpdump). Những gì tôi cần là một failafe rất chung chung.

Câu chuyện dài - khi tôi chạy một kịch bản như:

% this -is --my=very|awsome|script >> /var/tmp/output.log

Làm thế nào để đảm bảo rằng output.log sẽ không bao giờ lớn hơn 1GB.

Kịch bản có thể sụp đổ, bị giết hoặc bất cứ điều gì.

Giải pháp tôi đang tìm kiếm phải dễ dàng và đơn giản, chỉ sử dụng các công cụ có sẵn trong các bản phát hành phổ biến như ubfox / debian / fedora. Nói chung một cái gì đó có sẵn rộng rãi. Chương trình đa biến, phức tạp không phải là một lựa chọn ở đây bất kể ngôn ngữ / công nghệ.

Câu trả lời:


16

Bạn có thể sử dụng headcho việc này:

command | head -c 1G > /var/tmp/output.log

Nó chấp nhận K, M, G và tương tự như hậu tố (byte là mặc định). Nối 'B' để sử dụng 10 phiên bản cơ sở.


đầu tường một lần nữa Nó không thể đơn giản hơn. Cảm ơn!
mdrozdziel

2
Nó dường như tail -c 1Gcũng hoạt động, hữu ích để xem xét phần đuôi của một sự kiện. Có thể hiểu nó tuôn ra sau khi kết thúc lệnh.
bảnh bao

Đơn vị cho hậu tố không hoạt động trên Mac OS.
anumi

0

Đặt kích thước tệp tối đa cho người dùng sẽ chỉ được sử dụng để chạy các tập lệnh này.

Tệp /etc/security/limitsgiới hạn người dùng với các giá trị "mặc định" trừ khi có các giá trị rõ ràng cho một người dùng cụ thể. Các giá trị cụ thể của người dùng này sẽ ghi đè lên các giá trị mặc định. Tệp có thể có một tên hơi khác tùy thuộc vào hệ điều hành của bạn.

Nếu người dùng nhật ký của bạn có tên log_maker, thì hãy thêm dòng này vào tệp:

log_maker hard fsize 1000000

Số sau fsize là kích thước tệp tối đa tính bằng KB.



0

Bạn có thể giới hạn bất kỳ tập tin nào với

tail -c 1G myLog.log > myLog.tmp
mv myLog.tmp > myLog.log

Viết đuôi trực tiếp vào cùng một tệp làm cho một tệp trống. Vì vậy, bạn cần phải sử dụng một tập tin tạm thời.


tail -c 1G myLog.log> myLog.tmp mv myLog.tmp> myLog.log điều này sẽ giết nhật ký, tôi nghĩ bạn muốn sử dụng >> thay vì> hay không?
djdomi

Mục đích của lệnh này là viết lại nhật ký chỉ với 1G cuối cùng. >> nên dành cho lệnh trước: doS Something >> myLog.log; đuôi -c 1G myLog.log> myLog.tmp; mv myLog.tmp> myLog.log;
Séverin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.