Я замість цього mv
використовував cp
команду, щоб досягти того, щоб ви могли мати деякі логіни прямо там, де працює програмне забезпечення. Можливо, в іншому домашньому режимі dir або в dir додатку, і вони мають усі журнали в одному місці як жорсткі посилання. Якщо ви використовуєте mv
команду, ви втрачаєте жорстке посилання. Якщо ви cp
замість цього використовуєте команду, ви збережете це жорстке посилання.
мій код приблизно такий:
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
Отже, якщо файли перебувають у тій самій файловій системі, ви можете також надати деякі різні права користувачам та в ${LOGFILE_DIR}
ви змінюєте довжину, як і я.
Якщо це mv
команда, ви втрачаєте жорстке посилання між файлами, і тому ваш другий файл більше не підключений до першого - можливо, розміщується десь ще.
Якщо з іншого місця ви не дозволяєте комусь стерти файл, ваші журнали залишаються разом і підкоряються їм за допомогою власного сценарію.
logrotate
можливо, приємніше. Але я задоволений цим рішенням.
Не турбуйте "", але в моєму випадку є деякі файли з пробілами та іншими спеціальними літерами, і якщо я не виконую "" навколо або {}, весь лот не працює добре.
Наприклад, є Dir, де старіші файли автоматизовано встромляються у файл, OLDFILE.zip
і все, що отримується на блискавці, так само добре вказано у файлі, .zip_log
так що .zip_log
є і в цій Dir, але в програмі " LOGFILE_DIR
У мене":
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
рівний файл, оскільки це жорстке посилання.
logrotate
це елегантне рішення