[Linux] Crontab으로 오래된 파일 자동삭제하기

2022. 8. 31. 00:40IT 공부/개발환경

서버에서 UDP 통신으로 데이터를 수신하고 있으며 syslog-ng를 통해 파일로 저장중이다. 

날이 갈수록 파일이 쌓이기 때문에 일정 기간이 지나면 삭제하기 위한 스크립트를 작성하기로 했다. 

 

환경 : Redhat Linux 8 

기준 : 7일이 경과한 파일은 삭제 

경로 : /data/syslog_ng/

 

작성할 파일1 : remove_syslog_file.sh

작성할 파일2 : remove_syslog_file.log

사용할 시스템 : crond

 

1. 경로로 진입한다. 

cd /data/syslog_ng

 

2. vi 에디터로 파일1을 생성한다. 

vi remove_syslog_file.sh

 

3. 내용을 작성한다. 

내가 자동삭제하려는 실제 로그파일 경로는 아래와 같다. 

[ /data/syslog_ng/log/디렉토리1/디렉토리2/실제로그파일.log ]

 또한 크론탭 스케쥴이 실행되면 그 결과를 로그로 남기기 위해 echo 부분을 추가했다. 

sh 파일이 실행되면 2022-08-30 13:45:01 Result : delete old syslog files 과 같은 형식으로 CMDOUT이 찍힌다. 

#!/bin/sh

find /data/syslog_ng/log/*/*/ -mtime +6 -delete

echo $(date '+%Y-%m-%d %H:%M:%S') "Result : delete old syslog files"

 

4. echo 메세지가 기록될 빈 파일을 생성한다. 

touch remove_syslog_file.log

 

5. 두 파일의 실행권한을 변경하고 필요하다면 추가로 소유주도 변경한다. 

chmod 755 remove_syslog_file.*

chown 사용자계정명:root remove_syslog_file.*

 

6. root 권한으로 변경 후 crond가 실행중인지 확인한다. (root)

su root
systemctl status crond

 

7. 스케쥴을 등록하기 위해 crontab 수정 모드를 연다. (root)

crontab -e

 

8. 쉘 스크립트 파일의 스케쥴을 등록하면서 실행시 로그가 남도록 함께 작성한다. 

나는 오전 6시 정각에 스케쥴이 실행되게끔 했다. 

# run remove_syslog_file.sh
0 6 * * * /data/syslog_ng/remove_syslog_file.sh >> /data/syslog_ng/remove_syslog_file.log 2>&1

 

9. crontab 리스트를 출력하여 수정결과를 확인한다. 

crontab -l

 

10. crontab 수정 결과를 crond에 반영하기 위해 재시작한다. 

systemctl restart crond

 

자동삭제처리 끝~! 

 

(+) 나중에 시간이 된다면 삭제처리한 파일이름까지 로그에 남길 수 있도록 업그레이드 하면 좋을 것 같다. 

반응형