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 ý
- Quyền: Đảm bảo người dùng chạy công việc
croncó quyền truy cập và xóa các tệp trong thư mục nhật ký. - 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ư
logrotatethay vì chỉ đơn giản xóa chúng. - 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
crontrong 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.*.logbiể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_KEEPbiểu thị tìm kiếm tệp có thời gian sửa đổi lớn hơn$DAYS_TO_KEEPngà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.