맨 위에 로그가 매일 생성되어 많은 공간을 차지하는 것을 볼 수 있습니다.
ls -l /var/log/atop/
total 1634632
-rw-r--r-- 1 root root 127992086 Aug 30 01:49 atop_20180829
-rw-r--r-- 1 root root 262277153 Aug 31 00:00 atop_20180830
-rw-r--r-- 1 root root 321592670 Sep 1 00:00 atop_20180831
-rw-r--r-- 1 root root 330041977 Sep 2 00:00 atop_20180901
-rw-r--r-- 1 root root 269040388 Sep 3 00:00 atop_20180902
-rw-r--r-- 1 root root 274807097 Sep 4 00:00 atop_20180903
-rw-r--r-- 1 root root 85426960 Sep 4 06:03 atop_20180904
-rw-r--r-- 1 root root 0 Sep 4 06:03 daily.log
최대 로그를 5개 로그(지난 5일)로 제한하는 방법
답변1
RH/CentOS에서는 atop
지원되지 않습니다 logrotate
.
로그 파일 회전을 /usr/share/atop/atop.daily
처리하는 샘플 스크립트가 있습니다 .atop
스크립트는 다음과 같이 조회 라인으로 28일이 지난 로그를 삭제합니다.
# delete logfiles older than four weeks
# start a child shell that activates another child shell in
# the background to avoid a zombie
#
( (sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \;)& )
스크립트를 복사하여 /etc/cron.daily
일수를 5로 변경할 수 있습니다.
( (sleep 3; find $LOGPATH -name 'atop_*' -mtime +5 -exec rm {} \;)& )
일상적인 문서를 처리하는 것도 다소 불편할 수 있습니다. 위의 스크립트를 사용하여 순수 일일 순환을 수행할 계획이 없다면 /etc/sysconfig/atop
다음과 같이 기간(예: 10분)을 편집하고 변경할 수도 있습니다.
INTERVAL=600
대안으로, 정말 매일 회전하고 싶다면 다음 logrotate
과 같은 파일을 만들 수 있습니다 /etc/logrotate.d/atop
.
/var/log/atop/atop_20[0-9][0-9][0-9][0-9][0-9][0-9] {
missingok
daily
nodateext
rotate 5
ifempty
nocreate
postrotate
/usr/bin/find /var/log/atop/ -maxdepth 1 -mount -name atop_20\[0-9\]\[0-9\]\[0-9\]\[0-9\]\[0-9\]\[0-9\]\* -mtime +40 -exec /bin/rm {} \;
endscript
}
버전을 수행하는 경우 logrotate
일일 파일을 유지해야 하며 INTERVAL 매개변수를 변경하지 마십시오.
답변2
읽고 시간을 보낸 후에 이 솔루션을 찾았습니다.
#!/bin/sh
LOGOPTS="" # default options
LOGINTERVAL=600 # default interval in seconds
LOGGENERATIONS=28 # default number of days
LOGPATH=/var/log/atop # default log location
# allow administrator to overrule the variables
# defined above
#
DEFAULTSFILE=/etc/sysconfig/atop # possibility to overrule vars
if [ -e "$DEFAULTSFILE" ]
then
. "$DEFAULTSFILE"
# validate overruled variables
# (LOGOPTS and LOGINTERVAL are implicitly by atop)
#
case "$LOGGENERATIONS" in
''|*[!0-9]*)
echo non-numerical value for LOGGENERATIONS >&2
exit 1;;
esac
fi
CURDAY=`date +%Y%m%d`
BINPATH=/usr/bin
PIDFILE=/var/run/atop.pid
# verify if atop still runs for daily logging
#
if [ -e "$PIDFILE" ] && ps -p `cat "$PIDFILE"` | grep 'atop$' > /dev/null
then
kill -USR2 `cat "$PIDFILE"` # final sample and terminate
CNT=0
while ps -p `cat "$PIDFILE"` > /dev/null
do
CNT=$((CNT + 1))
if [ $CNT -gt 5 ]
then
break;
fi
sleep 1
done
rm "$PIDFILE"
fi
# delete logfiles older than N days (configurable)
# start a child shell that activates another child shell in
# the background to avoid a zombie
#
( (sleep 3; find "$LOGPATH" -name 'atop_*' -mtime +"$LOGGENERATIONS" -exec rm {} \;)& )
# activate atop with an interval of S seconds (configurable),
# replacing the current shell
#
exec gzip $LOGPATH/atop_$[CURDAY -1]
echo $$ > $PIDFILE
exec systemctl restart atop > "$LOGPATH/daily.log" 2>&1
/etc/crond.daily/atop.daily에 추가하세요.
도움이 되었기를 바랍니다