Định kỳ dọn dẹp nhật ký trên Linux

Trên hệ thống Linux, bạn có thể sử dụng công việc cron để thực thi một tập lệnh dọn dẹp nhật ký theo lịch trình. Dưới đây là một ví dụ đơn giản, bao gồm một tập lệnh dọn dẹp nhật ký và cách thiết lập công việc cron.

1. Tạo tập lệnh dọn dẹp nhật ký

Đầu tiên, tạo một tệp tập lệnh, ví dụ cleanup_logs.sh, và cấp quyền thực thi cho nó. Tập lệnh này sẽ xóa các tệp nhật ký trong thư mục chỉ định mà đã tồn tại quá số ngày quy định.

#!/bin/bash

# Thư mục chứa nhật ký
LOG_DIRECTORY="/đường/dẫn/tới/thư/mục/nhật/ký"

# Số ngày giữ lại
DAYS_TO_KEEP=30

# Tìm và xóa các tệp nhật ký cũ hơn số ngày quy định
find "$LOG_DIRECTORY" -type f -name "*.log" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;

# Làm trống tệp nhật ký cụ thể
LOG_FILE="/đường/dẫn/tới/nohup.log"
if [ -f "$LOG_FILE" ]; then
    > "$LOG_FILE"
    echo "Tệp nhật ký $LOG_FILE đã được làm trống."
else
    echo "Tệp nhật ký $LOG_FILE không tồn tại."
fi

# In kết quả dọn dẹp
echo "Các nhật ký cũ hơn $DAYS_TO_KEEP ngày trong $LOG_DIRECTORY đã được xóa."

Lưu tập lệnh trên thành cleanup_logs.sh và thay đổi /đường/dẫn/tới/thư/mục/nhật/ký bằng đường dẫn thư mục nhật ký thực tế của bạn. Sau đó, cấp quyền thực thi cho tập lệnh:

chmod +x cleanup_logs.sh

2. Thiết lập công việc cron

Tiếp theo, sử dụng cron để chạy tập lệnh theo lịch trình. Bạn có thể chỉnh sửa bảng cron của người dùng hiện tại bằng lệnh crontab -e.

crontab -e

Thêm một dòng vào bảng cron để chạy tập lệnh hàng ngày lúc 2 giờ sáng. Ví dụ:

0 2 * * * /đường/dẫn/tới/cleanup_logs.sh

Thay đổi /đường/dẫn/tới/cleanup_logs.sh bằng đường dẫn thực tế đến tập lệnh của bạn.

3. Lưu và thoát khỏi trình soạn thảo cron

Lưu và thoát khỏi trình soạn thảo (thường là Vim hoặc Nano, lệnh lưu và thoát có thể khác nhau).

4. Kiểm tra công việc cron

Bạn có thể sử dụng lệnh sau để xem các công việc cron hiện tại, đảm bảo rằng công việc mới của bạn đã được thêm vào:

crontab -l

Lưu ý

  1. Quyền: Đảm bảo người dùng chạy công việc cron có quyền truy cập và xóa các tệp trong thư mục nhật ký.
  2. Xoay vòng nhật ký: Đối với các tệp nhật ký quan trọng, nên sử dụng công cụ như logrotate thay vì chỉ đơn giản xóa chúng.
  3. Kiểm tra: Trước khi sử dụng chính thức, hãy kiểm tra tập lệnh và công việc cron trong môi trường thử nghiệm.

Bằng cách thực hiện các bước trên, bạn có thể thiết lập một tác vụ định kỳ để dọn dẹp tệp nhật ký trong thư mục chỉ định.

Phân tích lệnh chính

Lệnh sau đây là một ví dụ về cách sử dụng lệnh find để tìm và xóa các tệp thỏa mãn điều kiện cụ thể. Dưới đây là giải thích chi tiết về lệnh:

find "$LOG_DIRECTORY" -type f -name "*.log" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
  • find: Lệnh này dùng để tìm kiếm tệp và thư mục trong hệ thống tệp.
  • "$LOG_DIRECTORY": Đây là thư mục bắt đầu tìm kiếm. Biến $LOG_DIRECTORY được định nghĩa và gán giá trị là đường dẫn thư mục nhật ký. Sử dụng dấu ngoặc kép để xử lý đúng nếu đường dẫn chứa khoảng trắng hoặc ký tự đặc biệt.
  • -type f: Tùy chọn này chỉ định tìm kiếm tệp (không bao gồm thư mục, liên kết, v.v.).
  • -name "*.log": Tùy chọn này chỉ định mẫu tên tệp. *.log biểu thị tất cả tệp có phần mở rộng .log.
  • -mtime +$DAYS_TO_KEEP: Tùy chọn này chỉ định thời gian sửa đổi tệp (theo ngày). +$DAYS_TO_KEEP biểu thị tìm kiếm tệp có thời gian sửa đổi lớn hơn $DAYS_TO_KEEP ngày. Biến $DAYS_TO_KEEP được định nghĩa và gán giá trị là số ngày muốn giữ lại.
  • -exec rm -f {} \;: Tùy chọn này thực thi lệnh cụ thể cho mỗi tệp tìm thấy. Trong ví dụ này, lệnh là rm -f để xóa tệp. {} là chuỗi đặc biệt được thay thế bởi đường dẫn của từng tệp tìm thấy. \; đánh dấu kết thúc lệnh. Chú ý, dấu chấm phẩy trước đó có dấu gạch chéo ngược để tránh bị shell hiểu nhầm.

Tóm lại, lệnh này tìm kiếm và xóa tất cả tệp có phần mở rộng .log trong thư mục $LOG_DIRECTORY và các thư mục con, mà đã tồn tại lâu hơn $DAYS_TO_KEEP ngày.

Thẻ: linux cron shell-script log-management find-command

Đăng vào ngày 7 tháng 6 lúc 18:13