cron.daily가 실행되지 않는/etc/cron.d/0hourly와/etc.anacrontab 사이의 시간 차이



증상



CentOS Linux release 7.5.1804 (Core)
/var/log/httpd/access_log가 30MB도 모인다는 것을 깨달았다.
cron.daily가 실행되고 있지 않은 것에 의해, logrotete도 실행되지 않기 때문에 각 로그 파일이 비대화하고 있었다.

확인



/etc/logrotate.d/httpd 확인



/etc/logrotate.d/httpd 로 매일 체크해 용량이 1MB 이상 있으면 로테이트 해, 과거 로그는 30세대까지 남기는 설정이 되어 있다.

로그 로테이트를 테스트해도
[root@sv01 ~]# logrotate -d /etc/logrotate.d/httpd
省略
log needs rotating

과 용량 오버로 로테이트가 필요하지만, 실제로는 로테이트되어 있지 않다.
그 외 로그 파일, mysql, mail, message등도 로테이트 되지 않고, 용량이 비대화하고 있었으므로 「logrotate 커멘드 자체가 두드려져 있지 않은 것은 아닐까?」라고 생각한다.

cron 주위 확인



이전에 보관하고 있는 웹 서비스의 관계상, 디폴트 설정의 시간에 로그 로테이트나 바이러스 정의의 갱신 등의 cron이 실행되어 CPU를 압박하는 것을 피하기 위해서, 시간 설정을 변경한 것을 기억한다 .
[root@sv01 ~]# vi /etc/cron.d/0hourly
45 5 * * * * root run-parts /etc/cron.hourly
[root@sv01 ~]# vi /etc/anacrontab
START_HOURS_RANGE=6-8

조사해 보면
/etc/cron.daily/logrotate가 실행될 때까지의 흐름은

①/etc/cron.d/0hourly
# 05時45分に実行する
45 5 * * * * root run-parts /etc/cron.hourly

②/etc/anacrontab
省略
# 時間指定なし
/usr/sbin/anacron -s

③/etc/cron.hourly/0anacron
# 06時~08時のだったら実行する
START_HOURS_RANGE=6-8
# cron.dailyは1日毎で遅延は5分
1       5       cron.daily              nice run-parts /etc/cron.daily

④/etc/cron.daily/logrotate
# 時間指定なし
# logrotate実行
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf

원인



[1] 0hourly 시간을 쓰는 법이 잘못되었습니다. *표가 1개 많다.
[2] 0hourly와 anacrontab의 시간이 잘못되었습니다.
①이 05시 45분에 실행되지만, ③에서 06시~08시로 지정되어 있기 때문에, ③에서 정해져 있어 ④의 logrotate까지 추적하지 않았다.

수정



/etc/cron.d/0hourly에서 cron.hourly가 매시간 01분에 실행되도록 수정
01 * * * * root run-parts /etc/cron.hourly`

이렇게 하면 결과적으로 logrotate는 매일 06시~08시에 실행되게 된다.

logrotate를 05시 45분 저스트에 실행하는 경우는
· cron.daily의 실행 시간 지정을 0anacron으로 관리하지 않고, crontab로 시간 지정한다.
·/etc/cron.daily/logrotate를 이동시키고 crontab에서 시간을 지정합니다.
등의 방법도 생각할 수 있다.
이번은 05시 45분 이후라면 언제라도 좋기 때문에,/etc/cron.hourly/0anacron 의 START_HOURS_RANGE로 06시~08시라면이라는 모호 조건으로 실시한다.

좋은 웹페이지 즐겨찾기