Utilicé, en lugar de mv
, el cp
comando para lograrlo, que puede tener algunos archivos de registro en el lugar donde se está ejecutando un Software. Tal vez en el directorio de inicio del Usuario diferente o en el directorio de la aplicación y tenga todos los registros en un solo lugar como enlaces duros. Si usa el mv
comando, pierde el enlace duro. Si usa el cp
comando en su lugar, mantendrá este enlace rígido.
mi código es algo como:
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
Por lo tanto, si los archivos están en el mismo sistema de archivos, también puede otorgar algunos derechos diferentes a los usuarios y ${LOGFILE_DIR}
modificar la longitud como lo hago yo.
Si es el mv
comando, pierde el enlace rígido entre los archivos y, por lo tanto, su segundo archivo no está más conectado al primero, tal vez se ubique en otro lugar.
Si en el otro lugar no permites que alguien borre el archivo, tus registros permanecerán juntos y serán controlados a través de tu propio script.
logrotate
Quizás más agradable. Pero estoy contento con esta solución.
No se preocupe por el "" pero en mi caso hay algunos archivos con espacios y otras letras especiales y, si no hago el "" o el {}, todo no funciona bien.
Por ejemplo, hay un Dir donde los archivos más antiguos se comprimen automáticamente OLDFILE.zip
y todo lo que se comprime también se enumera en Archivo, .zip_log
por lo que también .zip_log
está en este Dir pero en el LOGFILE_DIR
que tengo con:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
el archivo igual ya que es un enlace duro.
logrotate
es la solución elegante