Zrobiłem użycie zamiast mv
The cp
polecenie, aby osiągnąć to, że jesteś w stanie mieć jakieś logi prawo w miejscu, w którym program jest uruchomiony. Może w innym katalogu użytkownika domowego lub w katalogu aplikacji i mieć wszystkie dzienniki w jednym miejscu jako linki dowiązane. Jeśli użyjesz mv
polecenia, utracisz twardy link. Jeśli cp
zamiast tego użyjesz polecenia, zachowasz ten twardy link.
mój kod jest jak:
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
Więc jeśli pliki znajdują się w tym samym systemie plików, możesz również dać użytkownikom różne prawa i ${LOGFILE_DIR}
modyfikować długość tak jak ja.
Jeśli jest to mv
polecenie, tracisz dowiązanie twarde między plikami, więc twój drugi plik nie jest bardziej połączony z pierwszym - być może umieścił gdzieś indziej.
Jeśli w innym miejscu nie pozwalasz komuś na usunięcie pliku, twoje dzienniki pozostają razem i są dobrze kontrolowane za pomocą własnego skryptu.
logrotate
może milszy. Ale cieszę się z tego rozwiązania.
Nie przejmuj się „”, ale w moim przypadku są jakieś pliki ze spacjami i innymi specjalnymi literami, a jeśli nie wykonam „” lub {}, cała partia nie będzie ładna.
Na przykład istnieje katalog, w którym starsze pliki są automatycznie spakowane do pliku, OLDFILE.zip
a wszystko, co jest spakowane, jest również wymienione w pliku, .zip_log
więc .zip_log
jest również w tym katalogu, ale w LOGFILE_DIR
Mam:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
równy plik, ponieważ jest to twardy link.
logrotate
to eleganckie rozwiązanie