리눅스 로그 자동 삭제 쉘 스크립트 적용하기

리눅스에서 지속적으로 생성되는 로그 파일을 백업하고 지우는 bash 스크립트를 작성해 보겠습니다. 스크립트가 잘 작동하면 crontab에 등록해서 매월 자동으로 로그를 백업하고 지우는 스케줄러도 적용해 보겠습니다. 이와 비슷한 작업이 필요하신 분들에게는 좋은 참고가 될 것입니다. 

로그 삭제 자동화 방법

저는 주기적으로 시스템 로그가 쌓이는 /var/log 경로에 있는 로그를 다른 파티션으로 백업하고 해당 로그 파일은 지우는 상황을 가정하고 구현하겠습니다.

1. 삭제 경로, 백업 경로 확인

먼저 /var/log 경로에 testmessages* 형태의 파일을 임의로 생성하겠습니다. 시스템 로그가 쌓이고 저장되는 형태와 동일하게 만들었습니다.

[root@localhost log]# pwd
/var/log
[root@localhost log]# ls -l | grep testmessages*
[root@localhost log]# ls -l | grep testmessages
-rw-r--r--. 1 root   root        13 Feb 10 02:52 testmessages
-rw-r--r--. 1 root   root         5 Feb 10 02:52 testmessages-20230208
-rw-r--r--. 1 root   root         5 Feb 10 02:52 testmessages-20230209

 

백업 경로는 /home/test로 정하겠습니다.

2. 로그 삭제 스크립트 생성

사용할 스크립트는 아래와 같습니다.

#!/bin/bash

# 로그를 삭제할 경로와 백업할 경로 변수 설정
log_dir=/var/log
backup_dir=/home/test

# 삭제할 경로가 존재하는지 확인
if [ -d "$log_dir" ]; then

# 백업할 경로가 존재하는지 확인. 만약 없으면 생성
  if [ ! -d "$backup_dir" ]; then
    mkdir -p "$backup_dir"
  fi

# 로그 파일을 백업
  cp -r "$log_dir"/testmessages* "$backup_dir"

# 로그 파일을 삭제
  rm -rf "$log_dir"/testmessages*

# 로그파일을 백업하고 삭제했다는 메시지 출력
  echo "Log files have been deleted and backed up to $backup_dir"
else

# 만약 삭제할 경로가 없으면 메시지 출력
  echo "The log directory $log_dir does not exist."
fi

※ 주의 : 이 스크립트는 루트 권한으로 rm -rf를 수행하기 때문에 사용에 각별히 주의해야 합니다. 테스트 환경에서 먼저 적용해보시는 게 좋습니다.

 

위 스크립트 내용을 /home/test 경로에 logbackup.sh라는 이름으로 만들겠습니다. 참고로 뒤에 붙이는 .sh 확장자는 쉘 스크립트 파일이라는 걸 명시하기 위함입니다. 리눅스에선 확장자를 보고 파일을 실행하지 않기 때문에 확장자 없이도 실행은 됩니다. 되도록 sh 확장자를 붙이는 걸 추천드립니다.

[root@localhost test]# vi logbackup.sh
[root@localhost test]# ls -l
total 4
-rw-r--r--. 1 root root 695 Feb 10 03:04 logbackup.sh

 

logbackup.sh 파일에 실행 권한을 부여합니다.

[root@localhost test]# chmod 755 logbackup.sh
[root@localhost test]# ls -l
total 4
-rwxr-xr-x. 1 root root 695 Feb 10 03:04 logbackup.sh

3. 스크립트 실행 테스트

작성한 스크립트를 실행합니다. 스크립트에 작성한 대로 로그 파일을 백업하고 삭제했다는 출력이 나옵니다.

[root@localhost test]# ./logbackup.sh
Log files have been deleted and backed up to /home/test

 

의도한대로 /var/log 경로에 있던 로그 파일이 /home/test 경로로 백업되고 기존 경로에 있던 원본 파일은 삭제됐습니다.

[root@localhost test]# ls
logbackup.sh  testmessages  testmessages-20230208  testmessages-20230209
[root@localhost test]# ls /var/log | grep testmessages
[root@localhost test]#

4. crontab 등록

이제 crontab에 등록해서 매월 첫 번째 날에 logbackup.sh를 실행하도록 설정하겠습니다.

[root@localhost test]# crontab -e
0 0 1 * * /home/test/logbackup.sh

 

crontab이 잘 등록됐는지 확인합니다.

[root@localhost test]# crontab -l
0 0 1 * * /home/test/logbackup.sh

 

크론탭 설정 방법에 대해서는 추가로 찾아보시고 원하는 방식으로 설정하시면 됩니다.

반응형

댓글

Designed by JB FACTORY