2025년 10월 29일 수요일

로그폴더내의 로그파일을 작업스케쥴러로 삭제

로그 폴더내에 있는 *.log파일들은 기록은 남긴다는 의미에서 
하드디스크 내에 남아 있어야한다. 그리고 이 로그파일은 아마도
특정일자 별로 파일로 남기는것이 관례처럼 느껴진다.
(yyyy-MM-dd.log)  이런 형식으로 남겨질것이다.

헌데 프로그램이 실행될때 이 로그파일이 너무 많이 쌓여 있거나
보관기간이 만료됐거나 혹은 로그파일 한개가 너무커서 금방 하드디스크를
채울것 같으면 과거 로그파일을 정리해야한다.

물론 프로그램내에서 기간이 만료된 로그파일을 삭제하는 쓰레드를 
별도로 작성해도 되지만.. 다른 사람이 작성했다던가 해당 프로그램의
내용을 수정할 수 없을때는 다른 방법을 써야한다.

그럴때 사용하는게 bat파일을 통해서 특정폴더의 *.log파일을 마지막 
수정시간을 현재시간과 비교해서 보관일자가 넘어가는것을 처리하는 
파일을 다음과 같이 기술한다.

[배치파일 내용]

@echo off

::  설정값 (LOG_DIR 에는 폴더경로  DAYS_TO_KEEP에는 보관일수)
set LOG_DIR=C:\Temp\로그
set DAYS_TO_KEEP=30

:: 삭제 실행
forfiles /P "%LOG_DIR%" /S /M *.log /D -%DAYS_TO_KEEP% /C "cmd /c del /F /Q @path"
echo --- LogFile Cleaned Up ---


이렇게 처리하고
이걸  cleanup.bat파일로 만들어서  c:\Temp 폴더에 넣어놓고
윈도우 작업스케쥴러로 등록해서 매일 오전 3시경에 실행하는걸로 하면
일정기간만 로그를 저장하는 환경이 구축된다.



[스케쥴러 등록방법]

1. 해당파일을 메모장으로 열어서  LOG_DIR  과  DAYS_TO_KEEP
적정히 수정한다.  (LOG_DIR=로그폴더   DAYS_TO_KEEP=보관일수)

2. taskschd.msc 를 실행하여 작업스케줄러로 진입

3. 우측작업패널에서 "기본작업 만들기" 선택하고
이름은 "로그삭제"로 지정
트리거는 "매일"  매 1일  03시 00분 00초
작업은 "프로그램 시작"
프로그램/스크립트는   "C:\Temp\cleanup.bat" 로 
경로를 설정하고 마침

4. 이렇게 등록한 스케줄러를 작업 스케줄러 라이브러리의 
내용에서 더블클릭하여 속성창으로 진입
일반탭 보안옵션에서 "가장 높은 수준의 권한으로 실행"  
체크하고 확인


이렇게 처리하면 된다.

ㅇㅇ

댓글 없음:

댓글 쓰기