Ich habe anstelle des Befehls mvden cpBefehl 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 mvBefehl verwenden, verlieren Sie die feste Verbindung. Wenn Sie cpstattdessen 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 mvBefehl 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.
logrotatevielleicht 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.zipund alles, was komprimiert wird, ist auch in der Datei aufgeführt, .zip_logalso auch .zip_login diesem Verzeichnis, aber in dem, mit dem LOGFILE_DIRich es habe:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
die gleiche Datei, wie es ein fester Link ist.
logrotateist die elegante Lösung