내가 대신 사용했다 mv는 cp명령을 사용하면 소프트웨어가 실행되는 경우 적절한 장소에 일부 로그 파일을 가질 수 있음을 달성하기 위해. 다른 사용자 홈 디렉토리 또는 앱 디렉토리에 있고 하드 링크로 한곳에 모든 로그가있을 수 있습니다. mv명령 을 사용하면 하드 링크가 끊어집니다. 당신이 사용하는 경우 cp명령을 대신이 하드 링크를 유지합니다.
내 코드는 다음과 같습니다
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
따라서 파일이 동일한 파일 시스템에 있으면 사용자에게 다른 권한을 부여하고 사용자 ${LOGFILE_DIR}처럼 길이를 수정할 수 있습니다.
이것이 mv명령이라면 파일 사이의 하드 링크를 잃어 두 번째 파일이 첫 번째 파일에 더 이상 연결되지 않습니다.
다른 곳에서 누군가 파일을 지우는 것을 허용하지 않으면 로그는 함께 있고 자신의 스크립트를 통해 잘 제어됩니다.
logrotate아마도 더 좋을 것입니다. 그러나이 솔루션에 만족합니다.
""에 의해 방해받지 않지만 내 경우에는 공백과 다른 특수 문자가 포함 된 파일이 있으며 ""주위에 또는 "}를 사용하지 않으면 전체가 잘 작동하지 않습니다.
예를 들어 오래된 파일이로 압축 자동화됩니다 일세 존재 OLDFILE.zip하고 압축 얻는 모든뿐만 아니라 파일에 나와있는 .zip_log(가) 때문에 .zip_log도이 디렉터리에 만에 LOGFILE_DIR내가 함께있어는 :
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
하드 링크이므로 동일한 파일
logrotate는 우아한 솔루션입니다