Ich habe anstelle des Befehls mv
den cp
Befehl verwendet, um zu erreichen, dass Sie in der Lage sind, einige Protokolldateien an der richtigen Stelle zu haben, an der eine Software ausgeführt wird. Vielleicht in den verschiedenen User Home Dir oder in den App Dir und haben alle Logs an einem Ort als Hardlinks. Wenn Sie den mv
Befehl verwenden, verlieren Sie die feste Verbindung. Wenn Sie cp
stattdessen den Befehl verwenden, behalten Sie diesen festen Link bei.
Mein Code ist so etwas wie:
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
Wenn sich die Dateien also auf demselben Dateisystem befinden, können Sie den Benutzern auch einige unterschiedliche Rechte erteilen und ${LOGFILE_DIR}
die Länge wie bei mir ändern.
Wenn es der mv
Befehl ist, verlieren Sie die feste Verbindung zwischen den Dateien, und Ihre zweite Datei ist nicht mehr mit der ersten verbunden - vielleicht haben Sie sie woanders platziert.
Wenn Sie andererseits nicht zulassen, dass jemand die Datei löscht, bleiben Ihre Protokolle zusammen und können über Ihr eigenes Skript gesteuert werden.
logrotate
vielleicht schöner. Aber ich bin mit dieser Lösung zufrieden.
Lassen Sie sich nicht durch das "" stören, aber in meinem Fall gibt es einige Dateien mit Leerzeichen und anderen Sonderzeichen. Wenn ich das "" nicht mache oder das {}, funktioniert das Ganze nicht gut.
Zum Beispiel gibt es ein Verzeichnis, in dem ältere Dateien automatisch komprimiert werden, OLDFILE.zip
und alles, was komprimiert wird, ist auch in der Datei aufgeführt, .zip_log
also auch .zip_log
in diesem Verzeichnis, aber in dem, mit dem LOGFILE_DIR
ich es habe:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
die gleiche Datei, wie es ein fester Link ist.
logrotate
ist die elegante Lösung