방금 IIS가 로그를 무기한으로 빌드하고 오래된 로그 파일을 자동으로 정리하는 IIS 설정이없는 것으로 나타났습니다. IIS 로그를 제어하여 전체 하드 드라이브를 채우지 않는 가장 좋은 방법은 무엇입니까?
방금 IIS가 로그를 무기한으로 빌드하고 오래된 로그 파일을 자동으로 정리하는 IIS 설정이없는 것으로 나타났습니다. IIS 로그를 제어하여 전체 하드 드라이브를 채우지 않는 가장 좋은 방법은 무엇입니까?
답변:
예약 된 작업을 실행해야합니다. 다음은 작동해야하는 Powershell 스크립트입니다.
set-location c:\windows\system32\Logfiles\W3SVC1\ -ErrorAction Stop
foreach ($File in get-childitem -include *.log) {
if ($File.LastWriteTime -lt (Get-Date).AddDays(-30)) {
del $File
}
}
30 일 이상 전에 마지막으로 수정 된 내용을 제거해야합니다. 첫 번째 행의 경로를 로그 파일이 저장된 위치로 변경하십시오. 또한 파일을 보존하려면 -30을 변경하십시오. -30은 30 일이 지난 항목을 삭제한다는 의미입니다.
LastWriteTime을 사용하지 않으려는 경우 FileInfo 객체의 다른 속성을 보여주는 이 기사 를 살펴볼 수 있습니다 .
Get-ChildItem *.* -include *.log
현재 매우 간단한 배치 파일 스크립트를 사용 하여이 작업을 수행하고 있습니다.
forfiles -p C:\inetpub\logs\LogFiles\ -s -m *.log -d -180 -c "cmd /C DEL @File"
또한 예약 된 작업 항목을 만들어 매일 실행하고 해당 폴더의 파일 압축 기능을 활성화했습니다.이 모든 것들이 IIS 파일 관련 문제를 해결했습니다.
배치 파일의 스위치에 대한 설명 :
실행 가능한 Powershell 대안을 찾고 있다면 이 다른 답변을 참조하십시오 . IIS LogFiles 폴더를 올바르게 줄이는 방법에 대한 다른 제안은 이 게시물을 확인하십시오 .
Microsoft는 웹 사이트에 스크립트를 제안 합니다 .
아래는 내가 필요로하는 수정 된 버전입니다.
Wscript.Echo "Starting log removal"
sLogFolder = "d:\retentiontest"
iMaxAge = 30 'in days
Set objFSO = CreateObject("Scripting.FileSystemObject")
set colFolder = objFSO.GetFolder(sLogFolder)
Wscript.Echo "Removing log files from folder: " & colFolder
For Each colSubfolder in colFolder.SubFolders
Set objFolder = objFSO.GetFolder(colSubfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
iFileAge = now-objFile.DateLastModified
if iFileAge > (iMaxAge+1) then
Wscript.Echo "Removing File: " & objFile.Name
objFSO.deletefile objFile, True
end if
Next
Next
반 직관적으로 작성된 날짜는 복사 된 파일의 경우와 마찬가지로 마지막으로 수정 된 날짜보다 늦을 수 있으므로 "DateCreated"에서 "DateLastModified"로 변경되었습니다. 최근에 업데이트 된 파일을 제거하고 싶지 않을 수 있습니다.
그런 다음 cscript.exe를 사용하여 실행하십시오 (예 :) cscript.exe d:\scripts\logRetentionScript.vbs
.