Tôi đã sử dụng, thay vì mv
, cp
lệnh để đạt được nó rằng bạn có thể có một số logfile ngay tại nơi Phần mềm đang chạy. Có thể trong thư mục nhà người dùng khác hoặc trong thư mục ứng dụng và có tất cả các bản ghi ở một nơi dưới dạng liên kết cứng. Nếu bạn sử dụngmv
lệnh, bạn sẽ mất liên kết cứng. Nếu bạn sử dụng cp
lệnh thay vì bạn sẽ giữ liên kết cứng này.
mã của tôi là một cái gì đó như:
TMP_FILE="$(mktemp "${TMPFILENAME}.XXX")"
for FILE in "${LOGFILE_DIR}"/* ; do
tail -n $MAXLINES "${FILE}" > "${TMP_FILE}"
if [ $(ls -g "${TMP_FILE}" | awk '{print $4}') -lt $(ls -g "${FILE}" | awk '{print $4}') ] ; then
cp "${TMP_FILE}" "${FILE}"
fi
done
Vì vậy, nếu các tệp nằm trên cùng một Hệ thống tệp, bạn cũng có thể cung cấp một số quyền khác nhau cho người dùng và trong ${LOGFILE_DIR}
bạn sửa đổi độ dài như tôi.
Nếu nó là mv
lệnh bạn mất liên kết cứng giữa các tệp và do đó tệp thứ hai của bạn không được kết nối nhiều hơn với tệp đầu tiên - có thể được đặt ở một số nơi khác.
Nếu ở nơi khác, bạn không cho phép ai đó xóa tệp thì nhật ký của bạn sẽ ở cùng nhau và được kiểm soát tốt thông qua tập lệnh của riêng bạn.
logrotate
có lẽ đẹp hơn Nhưng tôi hài lòng với giải pháp này.
Đừng bị làm phiền bởi "" nhưng trong trường hợp của tôi, có một số tệp có dấu cách và các chữ cái đặc biệt khác và nếu tôi không thực hiện "" xung quanh hoặc {} thì toàn bộ lô không hoạt động tốt.
Ví dụ: có một Dir nơi các tệp cũ hơn được tự động nén vào một OLDFILE.zip
và mọi thứ được nén cũng được liệt kê trong Tệp, .zip_log
vì vậy .zip_log
cũng có trong Dir này nhưng trong LOGFILE_DIR
Tôi đã có:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
các tập tin bằng nhau vì nó là một liên kết cứng.
logrotate
là giải pháp tao nhã