J'ai utilisé, au lieu de mv, la cpcommande pour y parvenir, vous pouvez avoir des fichiers journaux à l'endroit où un logiciel est en cours d'exécution. Peut-être dans le répertoire d'accueil de l'utilisateur différent ou dans le répertoire d'application et que tous les journaux sont regroupés en un seul endroit sous forme de liens physiques. Si vous utilisez la mvcommande, vous perdez le lien dur. Si vous utilisez cpplutôt la commande, vous conserverez ce lien dur.
mon code est quelque chose comme:
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
Donc, si les fichiers sont sur le même système de fichiers, vous pouvez également accorder des droits différents aux utilisateurs et ${LOGFILE_DIR}modifier la longueur comme je le fais.
Si c'est la mvcommande, vous perdez le lien dur entre les fichiers et donc votre deuxième fichier n'est plus connecté au premier - peut-être placé quelque part ailleurs.
Si à l'autre endroit vous ne permettez pas à quelqu'un d'effacer le fichier, vos journaux restent ensemble et sont bien contrôlés via votre propre script.
logrotatepeut-être plus agréable. Mais je suis satisfait de cette solution.
Ne soyez pas dérangé par le "" mais dans mon cas, il y a des fichiers avec des espaces et d'autres lettres spéciales dans et si je ne fais pas le "" autour ou le {} le tout ne fonctionne pas bien.
Par exemple, il existe un répertoire dans lequel les fichiers plus anciens sont automatiquement zippés dans un fichier OLDFILE.zipet tout ce qui est compressé est également répertorié dans le fichier, de .zip_logsorte qu'il se .zip_logtrouve également dans ce répertoire, mais dans le fichier LOGFILE_DIRque j'ai avec:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
le fichier égal car il s'agit d'un lien dur.
logrotateest la solution élégante