Zrobiłem użycie zamiast mvThe cppolecenie, 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 mvpolecenia, utracisz twardy link. Jeśli cpzamiast 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 mvpolecenie, 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.
logrotatemoż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.zipa wszystko, co jest spakowane, jest również wymienione w pliku, .zip_logwięc .zip_logjest również w tym katalogu, ale w LOGFILE_DIRMam:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
równy plik, ponieważ jest to twardy link.
logrotateto eleganckie rozwiązanie