리눅스 centos 서버에서 디스크 용량 이슈가 발생하여 분석을 진행 도중
/var/spool/postfix/ 에서 많은 용량을 사용하고 있었습니다.
해당 이슈는 postsuper -d ALL maildrop 을 사용해서 처리는 했지만 정확한 분석 및 추후 동일 이슈가 발생하지 않게 어떻게 관리할 것인가
(base AMI화) 를 고민 해봤습니다. (참조 블로그도 꼭 읽어주세요!)
먼저 디렉터리 역할을 찾아봤습니다.
/var/spool/cron 디렉토리는 크론 작업 예약 정보를 저장하는 디렉토리이며, /var/spool/postfix 디렉토리는 포스트픽스 메일 서버의 메일 데이터를 저장하는 디렉토리입니다.
/var
시스템운용중에 생성되었다가 삭제되는 데이터를 일시적으로 저장하기 위한 디렉토리. 거의 모든 시스템로그파일은 /var/log 에 저장되고, DNS 의 zone 설정파일은 /var/named 에 저장되고, 메일파일은 /var/spool/mail 에 저장되며, 크론설정파일은 /var/spool/cron 디렉토리에 각각 저장됨.
/var/spool/cron
디렉토리는 리눅스 시스템에서 사용자의 크론(cron) 작업 예약 정보를 저장하는 디렉토리입니다. 크론은 정해진 시간에 스크립트 또는 명령어를 실행시키는 스케줄러입니다. 크론 작업 예약 정보는 각 사용자별로 별도의 크론 테이블에 저장되며, 이 테이블은 주기적으로 /var/spool/cron 디렉토리에 저장됩니다. 따라서, 사용자가 예약한 크론 작업을 실행시키기 위해서는 /var/spool/cron 디렉토리에 저장된 예약 정보를 참조해야 합니다.
/var/spool/postfix
디렉토리는 리눅스 시스템에서 포스트픽스(postfix) 메일 서버의 메일 데이터를 저장하는 디렉토리입니다. 포스트픽스는 리눅스에서 가장 많이 사용되는 메일 서버 중 하나로, 이메일의 수신, 발신, 전달 등의 역할을 수행합니다. /var/spool/postfix 디렉토리는 이러한 포스트픽스 메일 서버의 역할을 수행하기 위해, 메일 데이터를 저장하는 임시 공간으로 사용됩니다. 메일 데이터는 이후에 적절한 처리를 거쳐 사용자의 메일박스에 전달되거나, 다른 메일 서버로 전달됩니다.
/var/log/cron
파일은 크론 작업의 실행 로그를 저장하는 파일입니다. 이 파일은 각 크론 작업이 언제 실행되었는지, 실행 결과가 어떤 것이었는지 등의 정보를 기록합니다. 이를 통해 각 크론 작업의 실행 상태를 모니터링하고, 문제가 발생한 경우에는 이를 파악할 수 있습니다.
crontab 구성도
1. 사용자는 crontab 명령어를 사용하여 crontab 파일을 생성하거나 수정합니다. crontab 파일에는 해당 사용자가 실행시키고자 하는 스크립트 또는 명령어와 실행 주기 등의 정보가 포함됩니다.
2. crontab 파일은 해당 사용자의 크론(cron) 테이블에 저장됩니다. 이때, 크론 테이블은 /var/spool/cron 디렉토리에 저장됩니다.
3. 정해진 주기에 따라 크론 데몬이 해당 사용자의 크론 테이블을 확인합니다. 만약 현재 시간과 일치하는 크론 작업이 있다면, 크론 데몬은 해당 작업을 실행합니다.
4. 크론 데몬은 실행된 작업의 결과를 /var/log/cron 파일에 기록합니다. 이 파일은 각 크론 작업의 실행 로그를 저장하는 파일입니다.
5. 실행된 작업 중에는 /var/spool/postfix/maildrop 디렉토리에 있는 메일 처리 작업이 있을 수 있습니다. 이 디렉토리는 postfix가 전달할 메일을 저장하는 임시 디렉토리입니다.
6. 크론 데몬은 이후에도 일정 주기에 따라 사용자의 크론 테이블을 확인하고, 해당 작업을 반복적으로 실행합니다.
7. postfix는 /var/spool/postfix/maildrop 디렉토리에 저장된 메일을 읽어서, 해당 메일이 전송될 수 있는 상태인지 확인합니다.
8. 전송 가능한 메일은 postfix에 의해 전송됩니다. 전송된 메일은 /var/log/mail.log 파일에 기록됩니다.
crontab log 설정
크론(cron) 로그 설정은 `/etc/rsyslog.conf` 파일에서 수정할 수 있습니다.
`/etc/rsyslog.conf` 파일에서 `cron` 로그 관련 부분을 찾아서 설정할 수 있습니다. 일반적으로 `cron` 로그는 `/var/log/cron.log` 파일에 기록되도록 설정되어 있습니다.
예를 들어, CentOS 7에서는 `/etc/rsyslog.conf` 파일에서 다음과 같이 설정할 수 있습니다.
```
# Log cron stuff
cron.* /var/log/cron.log
```
위 설정은 `cron` 로그 레벨이 `debug` 이상일 때 (`*`는 모든 레벨을 의미합니다), `/var/log/cron.log` 파일에 로그를 기록하도록 지정합니다.
설정을 변경한 후 변경사항을 적용하기 위해 `rsyslog` 서비스를 재시작해야 합니다
파일 삭제 방법 rm vs postsuper
`/var/spool/postfix/maildrop` 디렉토리는 포스트픽스(Postfix) 메일 서버에서 사용되는 디렉토리로, 메일을 처리하는 중간 저장소입니다. 이 디렉토리에서는 아직 처리되지 않은 메일이 저장되어 있을 수 있습니다.
만약 이 디렉토리에서 파일을 지우고 싶다면, `postsuper` 명령어를 사용하는 것이 좋습니다. `postsuper` 명령어는 포스트픽스 메일 서버에서 메일을 관리하는 명령어 중 하나로, 메일 큐에 있는 메일을 관리하고 삭제할 수 있습니다.
`rm` 명령어를 사용해 파일을 삭제하면, 삭제된 파일이 아직 포스트픽스 메일 서버에서 처리되지 않은 메일이라면 메일 전송에 문제가 발생할 수 있습니다. 따라서, `/var/spool/postfix/maildrop` 디렉토리에서 파일을 삭제할 때는 `postsuper` 명령어를 사용하여 삭제하는 것이 좋습니다.
만약 rm 명령어로 삭제가 필요한 경우 (IDC 환경에 디스크에 부하 이슈가 있을 경우)
예시 특정 달을 지정하여 삭제 (작업 전 삭제 파일량 확인 필요)
ll --time-style full-iso | awk '{print $6" "$9}' | grep 2019-04 | awk '{print $2}' | xargs rm -f
base AMI화
1. crontab config MAILTO="" 로 변경 및 systemctl restart crontab
2. 로그 관리 시스템에서 crontab 로그 래벨 설정
참조 블로그
틀린 내용이 있으면 댓글 부탁드립니다!