分割系统日志,解决syslog文件过大的问题

2024-01-07 21:10:59

问题描述

??随着系统使用时间越长,系统日志/var/log/syslog也会越来越大,达到几g或十几g,不但占用硬盘空间,且拷贝日志进行分析时也需要较长时间。


解决方案

对系统日志syslog进行分割,减少系统日志的大小

  • 执行如下脚本文件
chmod +x fix_logrotate.sh
sudo ./ fix_logrotate.sh

fix_logrotate.sh

#!/bin/bash

rm -f /var/log/syslog.*

cat >/etc/logrotate.d/rsyslog<<EOF
/var/log/syslog
{
        maxsize 20000k
        hourly
        rotate 4
        daily
        missingok
        notifempty
        delaycompress
        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/daemon.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 4
        maxsize 20000k
        hourly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                invoke-rc.d rsyslog rotate > /dev/null
        endscript
}
EOF

chmod 644 /etc/logrotate.d/rsyslog
[[ $(grep logrotate /etc/crontab|wc -l) == "0" ]] && echo "*/2 * * * *   root    /bin/bash /etc/cron.daily/logrotate > /dev/null 2>&1" >> /etc/crontab
  • 检验脚本是否执行成功
    终端输入如下指令,如果看到如下内容,表示执行成功
cat /etc/crontab

在这里插入图片描述

fix_logrotate.sh文件解析

  • fix_logrotate.sh脚本的作用是配置日志轮转(logrotate)功能,用于管理系统日志文件的大小和数量,以避免日志文件过大或过多导致磁盘空间不足。
  • #!/bin/bash: 指定脚本使用的解释器为Bash。
  • rm -f /var/log/syslog.*: 删除/var/log/syslog开头的所有文件,即删除以syslog开头的日志文件。
  • cat >/etc/logrotate.d/rsyslog<<EOF: 将下面的内容重定向到/etc/logrotate.d/rsyslog文件中,EOF表示结束符。
  • /var/log/syslog: 指定要进行日志轮转的日志文件路径。
    maxsize 20000k: 设置日志文件的最大大小为20MB。
    hourly: 指定日志文件每小时轮转一次。
    rotate 4: 保留4个轮转后的日志文件。
    daily: 指定日志文件每天轮转一次。
    missingok: 如果日志文件不存在,则忽略错误。
    notifempty: 如果日志文件为空,则忽略错误。
    delaycompress: 延迟压缩轮转后的日志文件。
    compress: 压缩轮转后的日志文件。
  • postrotate: 在轮转后执行的命令。
postrotate
	invoke-rc.d rsyslog rotate > /dev/null # 调用rsyslog服务的rotate命令进行日志轮转,并将输出重定向到/dev/null,即丢弃输出
endscript
  • /var/log/mail.info到/var/log/messages: 同样的配置,指定了其他需要进行日志轮转的日志文件路径。
  • chmod 644 /etc/logrotate.d/rsyslog: 修改/etc/logrotate.d/rsyslog文件的权限为644,即只有所有者有读写权限,其他用户只有读权限。
  • [[ $(grep logrotate /etc/crontab|wc -l) == "0" ]] && echo "*/2 * * * * root /bin/bash /etc/cron.daily/logrotate > /dev/null 2>&1" >> /etc/crontab: 检查/etc/crontab文件中是否已经存在logrotate的定时任务,如果不存在,则将定时任务添加到/etc/crontab文件中。该定时任务表示每2分钟执行一次logrotate脚本进行日志轮转,并将输出重定向到/dev/null,即丢弃输出。

文章来源:https://blog.csdn.net/qq_45445740/article/details/135435833
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。