背景

树莓派 raspbian 系统日志默认的配置会导致日志过大而占用太多的存储空间,并且频繁写日志也可能减短 EMMC 和 SD 卡的寿命,需要重新配置来满足项目的需求。

日志位置

/var/log
/var/log/syslog
/var/log/daemon.log
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages

配置 rsysloglogrotate

rsyslog 的配置文件为 /etc/rsyslog.conf, 找到其中 RULES

###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                         /var/log/cron.log
#daemon.*                       -/var/log/daemon.log
kern.*                          -/var/log/kern.log
lpr.*                           -/var/log/lpr.log
mail.*                          -/var/log/mail.log
user.*                          -/var/log/user.log

将其中 daemon.* -/var/log/daemon.log 行注释掉,syslog中已经包含 daemon 的日志。

修改 rsysloglogrotate 配置 /etc/logrotate.d/rsyslog

/var/log/syslog
/var/log/daemon.log
{
        rotate 3
        daily
        missingok
        notifempty
        nodelaycompress
        compress
        postrotate
                invoke-rc.d rsyslog rotate > /dev/null
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
        rotate 3
        weekly
        missingok
        notifempty
        compress
        nodelaycompress
        sharedscripts
        postrotate
                invoke-rc.d rsyslog rotate > /dev/null
        endscript
}

delaycompress 改为 nodelaycompress ,分割文件后立即压缩归档;另外 rotate 都设置为 3

立即测试一下配置

sudo /usr/sbin/logrotate /etc/logrotate.conf

写日志到内存

首先清空 /var/log 目录下面的日志(如果日志不多,可以不用清空)。

/etc/fstab 文件中添加以下内容, /var/log 最大可以使用 100MB 内存,也同时给其他常用的写目录/tmp/var/tmp 挂载到内存中。

tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=100m 0 0
tmpfs /tmp tmpfs defaults,noatime,nosuid,size=10m 0 0
tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=10m 0 0

重启系统或者手动挂载文件系统使之生效。