J'ai utilisé, au lieu de mv
, la cp
commande 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 mv
commande, vous perdez le lien dur. Si vous utilisez cp
plutô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 mv
commande, 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.
logrotate
peut-ê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.zip
et tout ce qui est compressé est également répertorié dans le fichier, de .zip_log
sorte qu'il se .zip_log
trouve également dans ce répertoire, mais dans le fichier LOGFILE_DIR
que j'ai avec:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
le fichier égal car il s'agit d'un lien dur.
logrotate
est la solution élégante