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