1.编辑/etc/logrotate.conf文件,添加如下配置,并保存
/var/log/ztj.log {
missingok
daily
create 644 root root
sharedscripts
postrotate
if [ -f /var/run/syslogd.pid ];then
/bin/kill -HUP $(/bin/cat /var/run/syslogd.pid) >/dev/null 2>&1 || true
fi
endscript
}
/var/log/ztj.log { #转储日志路径
missingok #当日志文件不存在时,忽略该日志文件的警告信息
daily #每天转储一次
create 644 root root #指定转储后创建新文件,权限为644,用户为root,属组为root
sharedscripts #该关键字后的脚本只执行一次
postrotate #在日志轮替之后执行脚本命令
if [ -f /var/run/syslogd.pid ];then
/bin/kill -HUP $(/bin/cat /var/run/syslogd.pid) >/dev/null 2>&1 || true #重启syslogd应用
fi
endscript #在日志轮替之后执行脚本命令
}
2.测试
由于日志转储设置为了daily,如果我们想及时知晓结果,可以使用logrotate命令手动测试。
logrotate命令用法:
logrotate [参数] /etc/logrotate.conf
参数 | 说明 |
-d | 打开调试模式。在调试模式下,不会对日志或文件进行任何更改,即:不会真的切割日志 |
-v | 详细显示输出信息 |
-f | 强制轮转 |
-->以debug测试是否生效,不会真的切割日志
命令:
logrotate -dvf /etc/logrotate.conf
[root@rhel77 log]# logrotate -dvf /etc/logrotate.conf
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file bootlog
reading config file chrony
reading config file cups
reading config file httpd
reading config file iscsiuiolog
reading config file libvirtd
reading config file libvirtd.lxc
reading config file libvirtd.qemu
reading config file mysql
reading config file nginx
reading config file numad
reading config file ppp
reading config file psacct
reading config file samba
olddir is now /var/log/samba/old
reading config file subscription-manager
reading config file syslog
reading config file up2date
reading config file wpa_supplicant
reading config file yum
Allocating hash table for state file, size 15360 B
Handling 21 logs
rotating pattern: /var/log/boot.log
forced from command line (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/boot.log
log does not need rotating (log is empty)
rotating pattern: /var/log/chrony/*.log forced from command line (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/chrony/*.log
log /var/log/chrony/*.log does not exist -- skipping
not running postrotate script, since no logs were rotated
rotating pattern: /var/log/cups/*_log forced from command line (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/cups/access_log
log does not need rotating (log is empty)considering log /var/log/cups/error_log
log does not need rotating (log is empty)considering log /var/log/cups/page_log
log does not need rotating (log is empty)
rotating pattern: /var/log/httpd/*log forced from command line (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/httpd/access_log
log does not need rotating (log is empty)considering log /var/log/httpd/error_log
log does not need rotating (log is empty)not running postrotate script, since no logs were rotated
rotating pattern: /var/log/iscsiuio.log forced from command line (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/iscsiuio.log
log /var/log/iscsiuio.log does not exist -- skipping
not running postrotate script, since no logs were rotated
rotating pattern: /var/log/libvirt/libvirtd.log forced from command line (4 rotations)
empty log files are rotated, only log files >= 102400 bytes are rotated, old logs are removed
considering log /var/log/libvirt/libvirtd.log
log /var/log/libvirt/libvirtd.log does not exist -- skipping
rotating pattern: /var/log/libvirt/lxc/*.log forced from command line (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/libvirt/lxc/*.log
log /var/log/libvirt/lxc/*.log does not exist -- skipping
rotating pattern: /var/log/libvirt/qemu/*.log forced from command line (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/libvirt/qemu/*.log
log /var/log/libvirt/qemu/*.log does not exist -- skipping
rotating pattern: /var/log/nginx/*.log forced from command line (52 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log does not need rotating (log is empty)considering log /var/log/nginx/error.log
log does not need rotating (log is empty)not running postrotate script, since no logs were rotated
rotating pattern: /var/log/numad.log forced from command line (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/numad.log
log /var/log/numad.log does not exist -- skipping
rotating pattern: /var/log/ppp/connect-errors forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/ppp/connect-errors
log /var/log/ppp/connect-errors does not exist -- skipping
rotating pattern: /var/account/pacct forced from command line (31 rotations)
empty log files are not rotated, old logs are removed
considering log /var/account/pacct
error: stat of /var/account/pacct failed: No such file or directory
rotating pattern: /var/log/samba/* forced from command line (4 rotations)
olddir is /var/log/samba/old, empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
rotating pattern: /var/log/rhsm/*.log forced from command line (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/rhsm/rhsmcertd.log
log does not need rotating (log is empty)considering log /var/log/rhsm/rhsm.log
log does not need rotating (log is empty)
rotating pattern: /var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
forced from command line (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/cron
log needs rotating
considering log /var/log/maillog
log needs rotating
considering log /var/log/messages
log needs rotating
considering log /var/log/secure
log needs rotating
considering log /var/log/spooler
log /var/log/spooler does not exist -- skipping
rotating log /var/log/cron, log->rotateCount is 4
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/cron-20231117 already exists, skipping rotation
rotating log /var/log/maillog, log->rotateCount is 4
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/maillog-20231117 already exists, skipping rotation
rotating log /var/log/messages, log->rotateCount is 4
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/messages-20231117 already exists, skipping rotation
rotating log /var/log/secure, log->rotateCount is 4
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/secure-20231117 already exists, skipping rotation
rotating pattern: /var/log/up2date forced from command line (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/up2date
log /var/log/up2date does not exist -- skipping
rotating pattern: /var/log/wpa_supplicant.log forced from command line (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/wpa_supplicant.log
log /var/log/wpa_supplicant.log does not exist -- skipping
rotating pattern: /var/log/yum.log forced from command line (4 rotations)
empty log files are not rotated, log files >= 30720 are rotated earlier, old logs are removed
considering log /var/log/yum.log
log does not need rotating (log is empty)
rotating pattern: /var/log/wtmp forced from command line (1 rotations)
empty log files are rotated, only log files >= 1048576 bytes are rotated, old logs are removed
considering log /var/log/wtmp
log needs rotating
rotating log /var/log/wtmp, log->rotateCount is 1
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/wtmp-20231117 already exists, skipping rotation
rotating pattern: /var/log/btmp forced from command line (1 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/btmp
log needs rotating
rotating log /var/log/btmp, log->rotateCount is 1
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/btmp-20231117 already exists, skipping rotation
rotating pattern: /var/log/ztj.log forced from command line (4 rotations)
empty log files are rotated, old logs mailed to 654806827@qq.com
considering log /var/log/ztj.log
log needs rotating
rotating log /var/log/ztj.log, log->rotateCount is 4
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/ztj.log to /var/log/ztj.log-20231117
creating new /var/log/ztj.log mode = 0644 uid = 0 gid = 0
running postrotate script
running script with arg /var/log/ztj.log : "
if [ -f /var/run/syslogd.pid ];then
/bin/kill -HUP $(/bin/cat /var/run/syslogd.pid) >/dev/null 2>&1 || true
fi
"
[root@rhel77 log]#
-->强制生效并显示详细的输出信息
命令:
logrotate -vf /etc/logrotate.conf
[root@rhel77 log]# logrotate -vf /etc/logrotate.conf
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file bootlog
reading config file chrony
reading config file cups
reading config file httpd
reading config file iscsiuiolog
reading config file libvirtd
reading config file libvirtd.lxc
reading config file libvirtd.qemu
reading config file mysql
reading config file nginx
reading config file numad
reading config file ppp
reading config file psacct
reading config file samba
olddir is now /var/log/samba/old
reading config file subscription-manager
reading config file syslog
reading config file up2date
reading config file wpa_supplicant
reading config file yum
Allocating hash table for state file, size 15360 B
Handling 21 logs
rotating pattern: /var/log/boot.log
forced from command line (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/boot.log
log does not need rotating (log is empty)
rotating pattern: /var/log/chrony/*.log forced from command line (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/chrony/*.log
log /var/log/chrony/*.log does not exist -- skipping
not running postrotate script, since no logs were rotated
rotating pattern: /var/log/cups/*_log forced from command line (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/cups/access_log
log does not need rotating (log is empty)considering log /var/log/cups/error_log
log does not need rotating (log is empty)considering log /var/log/cups/page_log
log does not need rotating (log is empty)
rotating pattern: /var/log/httpd/*log forced from command line (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/httpd/access_log
log does not need rotating (log is empty)considering log /var/log/httpd/error_log
log does not need rotating (log is empty)not running postrotate script, since no logs were rotated
rotating pattern: /var/log/iscsiuio.log forced from command line (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/iscsiuio.log
log /var/log/iscsiuio.log does not exist -- skipping
not running postrotate script, since no logs were rotated
rotating pattern: /var/log/libvirt/libvirtd.log forced from command line (4 rotations)
empty log files are rotated, only log files >= 102400 bytes are rotated, old logs are removed
considering log /var/log/libvirt/libvirtd.log
log /var/log/libvirt/libvirtd.log does not exist -- skipping
rotating pattern: /var/log/libvirt/lxc/*.log forced from command line (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/libvirt/lxc/*.log
log /var/log/libvirt/lxc/*.log does not exist -- skipping
rotating pattern: /var/log/libvirt/qemu/*.log forced from command line (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/libvirt/qemu/*.log
log /var/log/libvirt/qemu/*.log does not exist -- skipping
rotating pattern: /var/log/nginx/*.log forced from command line (52 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
log does not need rotating (log is empty)considering log /var/log/nginx/error.log
log does not need rotating (log is empty)not running postrotate script, since no logs were rotated
rotating pattern: /var/log/numad.log forced from command line (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/numad.log
log /var/log/numad.log does not exist -- skipping
rotating pattern: /var/log/ppp/connect-errors forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/ppp/connect-errors
log /var/log/ppp/connect-errors does not exist -- skipping
rotating pattern: /var/account/pacct forced from command line (31 rotations)
empty log files are not rotated, old logs are removed
considering log /var/account/pacct
error: stat of /var/account/pacct failed: No such file or directory
rotating pattern: /var/log/samba/* forced from command line (4 rotations)
olddir is /var/log/samba/old, empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
rotating pattern: /var/log/rhsm/*.log forced from command line (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/rhsm/rhsmcertd.log
log does not need rotating (log is empty)considering log /var/log/rhsm/rhsm.log
log does not need rotating (log is empty)
rotating pattern: /var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
forced from command line (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/cron
log needs rotating
considering log /var/log/maillog
log needs rotating
considering log /var/log/messages
log needs rotating
considering log /var/log/secure
log needs rotating
considering log /var/log/spooler
log /var/log/spooler does not exist -- skipping
rotating log /var/log/cron, log->rotateCount is 4
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/cron-20231117 already exists, skipping rotation
rotating log /var/log/maillog, log->rotateCount is 4
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/maillog-20231117 already exists, skipping rotation
rotating log /var/log/messages, log->rotateCount is 4
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/messages-20231117 already exists, skipping rotation
rotating log /var/log/secure, log->rotateCount is 4
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/secure-20231117 already exists, skipping rotation
rotating pattern: /var/log/up2date forced from command line (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/up2date
log /var/log/up2date does not exist -- skipping
rotating pattern: /var/log/wpa_supplicant.log forced from command line (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/wpa_supplicant.log
log /var/log/wpa_supplicant.log does not exist -- skipping
rotating pattern: /var/log/yum.log forced from command line (4 rotations)
empty log files are not rotated, log files >= 30720 are rotated earlier, old logs are removed
considering log /var/log/yum.log
log does not need rotating (log is empty)
rotating pattern: /var/log/wtmp forced from command line (1 rotations)
empty log files are rotated, only log files >= 1048576 bytes are rotated, old logs are removed
considering log /var/log/wtmp
log needs rotating
rotating log /var/log/wtmp, log->rotateCount is 1
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/wtmp-20231117 already exists, skipping rotation
rotating pattern: /var/log/btmp forced from command line (1 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/btmp
log needs rotating
rotating log /var/log/btmp, log->rotateCount is 1
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/btmp-20231117 already exists, skipping rotation
rotating pattern: /var/log/ztj.log forced from command line (4 rotations)
empty log files are rotated, old logs mailed to 654806827@qq.com
considering log /var/log/ztj.log
log needs rotating
rotating log /var/log/ztj.log, log->rotateCount is 4
dateext suffix '-20231117'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/ztj.log to /var/log/ztj.log-20231117
creating new /var/log/ztj.log mode = 0644 uid = 0 gid = 0
running postrotate script
[root@rhel77 log]# ls -l ztj.log-20231117
-rw-r--r-- 1 root root 679 Nov 17 09:32 ztj.log-20231117
[root@rhel77 log]#
补充:
每天定时执行/etc/cron.daily目录下的文件设置,其是在/etc/anacrontab文件定义的,那么anacrontab怎么知道上次成功执行脚本的具体时间呢?通过查看/etc/cron.daily/logrotate文件,我们知晓/etc/cron.daily/logrotate文件中记录了/var/lib/logrotate/logrotate.status这个一个文件,此文件的作用是记录最近一次成功运行日志转储的具体时间。
-->/var/lib/logrotate/logrotate.status文件详情
[root@rhel77 ~]# cat /var/lib/logrotate/logrotate.status
logrotate state -- version 2
"/var/log/nginx/error.log" 2023-11-17-9:1:1
"/var/log/yum.log" 2023-11-8-14:52:21
"/var/log/cups/page_log" 2023-2-24-15:0:0
"/var/log/cups/error_log" 2023-2-24-15:0:0
"/var/log/boot.log" 2023-11-17-9:1:1
"/var/log/up2date" 2023-1-31-16:0:0
"/var/log/cups/access_log" 2023-2-24-15:0:0
"/var/log/libvirt/lxc/*.log" 2023-2-24-15:0:0
"/var/log/httpd/error_log" 2023-10-19-10:34:1
"/var/log/wtmp" 2023-11-17-9:35:5
"/var/log/chrony/*.log" 2023-1-31-16:0:0
"/var/log/spooler" 2023-5-21-14:37:1
"/var/log/btmp" 2023-11-17-9:35:5
"/var/log/rhsm/rhsmcertd.log" 2023-11-17-9:20:33
"/var/log/iscsiuio.log" 2023-1-31-16:0:0
"/var/log/maillog" 2023-11-17-9:35:5
"/var/log/libvirt/libvirtd.log" 2023-2-24-15:0:0
"/var/log/libvirt/qemu/*.log" 2023-2-24-15:0:0
"/var/log/ztj.log" 2023-11-17-9:35:5
"/var/log/wpa_supplicant.log" 2023-1-31-16:0:0
"/var/log/secure" 2023-11-17-9:35:5
"/var/log/numad.log" 2023-2-24-15:0:0
"/var/log/nginx/access.log" 2023-11-14-9:1:1
"/var/log/rhsm/rhsm.log" 2023-11-17-9:20:33
"/var/log/ppp/connect-errors" 2023-2-24-15:0:0
"/var/log/messages" 2023-11-17-9:35:5
"/var/log/httpd/access_log" 2023-6-4-10:30:1
"/var/log/cron" 2023-11-17-9:35:5
"/var/account/pacct" 2023-2-24-15:0:0
[root@rhel77 ~]#
-->/etc/anacrontab文件详情
[root@rhel77 ~]# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
[root@rhel77 ~]#
基于/etc/anacrontab文件,如果机器没有关机/异常,默认logrotate每天会在3:05-3:50之间执行,其真实的延迟时间是RANDOM_DELAY + delay in minutes。
如果在3点-22点(START_HOURS_RANGE)期间,服务器处于关机状态,则logrotate会在机器开机5分钟后执行日志转储操作。