一份菜单

如何:带有10个示例的终极Logrotate命令教程

有效管理日志文件是Linux sysadmin的一项基本任务。

在本文中,让我们讨论如何使用UNIX执行以下日志文​​件操作 对数旋转 效用。

  • 当文件大小达到特定大小时旋转日志文件
  • 旋转旧日志文件后,继续将日志信息写入新创建的文件
  • 压缩旋转的日志文件
  • 为旋转的日志文件指定压缩选项
  • 旋转带有文件名中日期的旧日志文件
  • 日志轮换后立即执行自定义外壳程序脚本
  • 删除较旧的循环日志文件

1. Logrotate配置文件

以下是您应注意的一些关键文件,以使logrotate正常工作。

/ usr / sbin / 对数旋转 –logrotate命令本身。

/etc/cron.daily/logrotate –此Shell脚本每天执行一次logrotate命令。

$ cat /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t 对数旋转 "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

/etc/logrotate.conf –在此文件中指定了所有日志文件的日志轮转配置。

$ cat /etc/logrotate.conf
weekly
rotate 4
create
include /etc/logrotate.d
/var/log/wtmp {
    每月一次
    minsize 1M
    创建 0664 root utmp
    rotate 1
}

/etc/logrotate.d –在系统上安装各个软件包后,它们会将日志轮换配置信息放置在此目录中。例如,yum日志轮换配置信息如下所示。

$ cat /etc/logrotate.d/yum
/var/log/yum.log {
    Missingok
    notifempty
    size 30k
    每年
    创建0600根根
}

2. Logrotate size选项:当文件大小达到特定限制时,旋转日志文件

如果要每隔1KB旋转一个日志文件(例如,/ tmp / 输出日志),请如下所示创建logrotate.conf。

$ cat 对数旋转.conf
/tmp/output.log {
        size 1k
        创建700 bala bala
        旋转4
}

此logrotate配置具有以下三个选项:

  • size 1k –仅在文件大小等于(或大于)此大小时运行logrotate。
  • 创建–旋转原始文件,并以指定的权限,用户和组创建新文件。
  • 旋转–限制日志文件的旋转次数。因此,这将仅保留最近的4个循环日志文件。

在logrotation之前,以下是output.log的大小:

$ ls -l /tmp/output.log
-rw-r--r-- 1 bala bala 25868 2010-06-09 21:19 /tmp/output.log

现在,运行logrotate命令,如下所示。选项-s指定用于写入logrotate状态的文件名。

$ 对数旋转 -s /var/log/logstatus 对数旋转.conf

注意:每当需要某些文件的日志轮换时,请准备logrotate配置并手动运行logroate命令。
对数旋转后,以下是output.log的大小:

$ ls -l /tmp/output*
-rw-r--r--  1 bala bala 25868 2010-06-09 21:20 输出日志.1
-rwx------ 1 bala bala        0 2010-06-09 21:20 输出日志

最终,这将继续遵循旋转日志文件的设置。

  • 输出日志4。
  • 输出日志.3
  • 输出日志.2
  • 输出日志.1
  • 输出日志

请记住,日志轮换后,与该服务相对应的日志文件仍将指向轮换文件(output.log.1)并继续写入。如果要轮换日志文件,则可以使用上述方法。 阿帕奇 access_log或error_log 每5 MB。

理想情况下,您应该修改/etc/logrotate.conf以指定特定日志文件的logrotate信息。

另外,如果您有大量的日志文件,则可以使用: 在Unix中查看巨大日志文件的10个很棒的示例

3. Logrotate 复制截断 option: Continue to write the log 信息rmation in the newly 创建d file after rotating the old log file.

$ cat 对数旋转.conf
/tmp/output.log {
         size 1k
         复制截断
         旋转4
}

复制截断 instruct 对数旋转 to 创建s the copy of the original file (i.e rotate the original log file) and truncates the original file to zero 通过te size. 这个 helps the respective service that belongs to that log file can write to the proper file.

在处理日志文件时,您可能会发现 sed替代品, sed删除 提示很有帮助。

4. Logrotate 压缩选项:压缩旋转的日志文件

如果您使用如下所示的compress选项,则旋转的文件将使用gzip实用程序进行压缩。

$ cat 对数旋转.conf
/tmp/output.log {
        size 1k
        复制截断
        创建700 bala bala
        旋转4
        压缩
}

压缩日志文件的输出:

$ ls /tmp/output*
output.log.1.gz 输出日志

5. Logrotate dateext选项:使用日志文件名中的日期旋转旧的日志文件

$ cat 对数旋转.conf
/tmp/output.log {
        size 1k
        复制截断
        创建700 bala bala
        dateext
        旋转4
        压缩
}

完成上述配置后,您’如下所示,您将在轮换的日志文件中注意到日期。

$ ls -lrt /tmp/output*
-rw-r--r--  1 bala bala 8980 2010-06-09 22:10 输出日志-20100609.gz
-rwxrwxrwx 1 bala bala     0 2010-06-09 22:11 输出日志

每天只能工作一次。因为当它尝试在同一天的下一次旋转时,较早旋转的文件将具有相同的文件名。因此,在同一天第一次运行后,logrotate将不会成功。

通常,您可以使用tail -f实时查看日志文件的输出。你甚至可以 结合多个tail -f输出 并显示在单个终端上。

6.每月,每天,每周Logrotate选项:每周/每天/每月旋转日志文件

要每月轮换一次,

$ cat 对数旋转.conf
/tmp/output.log {
        每月一次
        复制截断
        旋转4
        压缩
}

如下所示添加每周关键字,以进行每周日志轮换。

$ cat 对数旋转.conf
/tmp/output.log {
        weekly
        复制截断
        旋转4
        压缩
}

每天为日志循环添加如下所示的Daily关键字。您还可以每小时轮换日志。

$ cat 对数旋转.conf
/tmp/output.log {
        日常
        复制截断
        旋转4
        压缩
}

7. Logrotate 后旋转 尾标选项:日志轮换后立即运行自定义shell脚本

Logrotate允许您在完成日志文件轮换后运行自己的自定义外壳程序脚本。以下配置表明它将在logrotation之后执行myscript.sh。

$ cat 对数旋转.conf
/tmp/output.log {
        size 1k
        复制截断
        旋转4
        压缩
        后旋转
               /home/bala/myscript.sh
        尾标
}

8. Logrotate maxage选项:删除旧的旋转日志文件

在特定的天数后,Logrotate会自动删除旋转的文件。以下示例表明,轮播的日志文件将在100天后删除。

$ cat 对数旋转.conf
/tmp/output.log {
        size 1k
        复制截断
        旋转4
        压缩
        maxage 100
}

9. Logrotate Missingok选项:如果缺少日志文件,则不返回错误

当实际文件不可用时,可以使用此选项忽略错误消息,如下所示。

$ cat 对数旋转.conf
/tmp/output.log {
        size 1k
        复制截断
        旋转4
        压缩
        Missingok
}

10. Logrotate 压缩cmd和compressext选项:为日志文件旋转指定压缩命令

$ cat 对数旋转.conf
/tmp/output.log {
        size 1k
        复制截断
        创建
        压缩
        压缩命令/bin/bzip2
        压缩ext .bz2
        旋转4
}

上面指定了以下压缩选项:

  • 压缩–指示应进行压缩。
  • 压缩命令–指定应使用哪种类型的压缩命令。例如:/ bin / bzip2
  • 压缩扩展–在旋转的日志文件上指定扩展名。如果没有此选项,则旋转文件的默认扩展名为.gz。因此,如果您使用bzip2 压缩ioncmd,则将扩展名指定为.bz2,如上例所示。

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 37 评论… 加一 }

  • Alawishis 2010年11月29日,下午6:20

    如果我’我没弄错示例中的权限将是由于“create 644” not “create 700”。 700将产生-rwx—— not -rw-r–r–如图所示,除非我’ve missed something.

  • 射频 2010年12月15日,下午2:52

    关于动态文件名时如何使用logrotate的任何想法,例如:
    messages_03956-20101208153330Z-345df1e000.log

    哪里“20101208153330Z”是日期,但我认为其他数字与PID有关。

    谢谢。

  • 布鲁斯 2010年12月19日,上午9:12

    射频 –假设数字是名称的动态部分,只需用*代替该部分。例如,“messages_*.log”

  • 安迪·阿尔特 2011年1月27日,下午12:39

    而用户没有’不必是root即可使用logrotate:这来自logrotate手册页:

    -s,–state
    告诉logrotate使用备用状态文件。这很有用
    如果logrotate以不同用户的身份运行于各种设备集
    日志文件。默认状态文件是/var/lib/logrotate.sta-
    tus。

    一个可以使用“find . -name *.log”在他或她的$ HOME目录中,然后将它们添加到自己的$ HOME目录中的自己的logrotate脚本中。

  • 凯捷·佩特森 2011年2月21日,下午5:17

    谢谢。我一直在寻找ðŸ™,

  • 贾拉尔·哈吉霍拉马利 2011年8月21日,上午10:42

    非常感谢

  • 提姆 2011年8月23日,上午8:25

    这个 文章 涵盖了FreeBSD日志旋转

  • 阿文德 2011年9月20日,晚上11:24

    太好了,它就像一种魅力。

  • 伯恩·阿达莫维奇 2011年12月22日,上午8:07

    对我来说,快速入门是logrotate的好方法。非常感谢!

  • 杰克斯 2012年1月31日,上午3:49

    像往常一样,是关于该主题的最简单,最全面的教程。非常感谢你。

  • 普拉文 2012年4月20日,上午2:40

    您好:

    应该使用postrotate来停止和运行该应用程序吗?还是logrotate在轮换后处理新的日志文件?

  • Gokulnath 2012年5月6日,晚上10:32

    你好,
    有没有人尝试过可怕的日志轮换,据我所知,日志轮换是由cron.daily中的脚本完成的,可以’不能使用较小的频率。
    任何意见 ?

  • 亚力山大 2012年6月4日,上午1:34

    如果同时指定大小和每日(或另一个期间)选项,将会怎样?
    我希望logrotate旋转文件在达到指定大小后立即旋转,但如果没有达到指定的时间,则立即旋转。

  • 希创 2012年6月4日,上午7:26

    Gokulnath:您可以将脚本放入/etc/cron.hourly中以获取小时。

  • 洛林·提格(Lorraine Tighe) 2012年10月12日,上午8:10

    每次尝试进行logrotate时,无论是否旋转了什么,我都需要运行一个命令。只有至少旋转了一个日志文件时,Lastaction,firstaction,postrotate和prerotate才起作用。有任何想法吗?

  • 托尼·阿库莱塔 2012年12月14日,下午7:52

    为什么在logrotate运行时需要运行该命令?您应该只能够使用crontab -e crontab命令…

  • 内存 2013年1月29日,上午2:25

    之间有什么区别
    创建644& 700
    以及它的用途是什么

  • 简讯 2013年2月13日,上午4:56

    嗨,感谢您在此处发布有关日志轮换的宝贵信息,
    我只是想知道他们是处理所有这些问题的任何第三方工具
    我的意思是

    存档(压缩)日志文件,然后删除旧的日志文件
    并且应该每周执行一次,即归档和删除日志文件
    那么,除了linux 对数旋转命令之外,他们的任何第三方日志轮转工具都使任务lil变得容易吗?
    谢谢

  • 信息 2013年5月1日,下午4:04

    如何设置logrotate邮件/ secure / cron的多年压缩?
    /tmp/output.log {
    每年
    monthly
    daily
    copytruncate
    创建700 bala bala
    旋转4
    压缩
    dateext

  • 小数 2013年6月2日,晚上11:53

    嗨,使用“create ..” command along with “copytruncate” will not have any effect. 这个 is because 复制截断 itself 创建s a copy of the original log file before truncatnig that original file to zero size (according to MAN page). my ref is 这个.

  • stp 2013年6月24日,上午8:42

    你好
    快速问题
    我有一个集中的日志服务器,需要保留所有日志,以下工作将可以进行:
    在/etc/logrotate.conf中,我有:
    日常
    旋转4
    创建
    dateext
    压缩
    并在/etc/logrotate.d/syslog中:
    / var / log / messages
    / var / log / secure
    / var / log /后台处理程序
    {
    每年
    每月一次
    日常
    共享脚本
    后旋转
    / bin / kill -HUP`cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    尾标
    }

    提前致谢 !

  • 麦可 2013年10月31日,下午12:44

    你好

    非常感谢。我发现它真的很有用,它几乎包含了所有内容。我在第3节中发现的一件事涉及“copytruncate”是原始文件对我来说恢复了原始大小。这是因为写入日志文件的过程没有任何logrotate的操作,只是在最后一个偏移处继续。这也被描述 这里.

    我的解决方案是在这种情况下关闭日志记录。

  • 麦可 2013年10月31日,下午12:46

    我当然应该补充说,仅在某些情况下,日志文件才恢复为原始大小,并且‘copytruncate’通常,技巧确实确实很好。

  • 瑞安 2014年1月10日,上午10:10

    我不’在我的FreeBSD机器上没有logrotate。 (菜鸟快讯)我该如何安装它,以便可以设置您正在谈论的内容。另外,我’我非常有兴趣将其用于 FreeRADIUS,然后导出到其他位置的跳转框,在那里有人可以通过ftp记录特定的日志文件。那可能吗?

  • 艾克斯 2014年2月1日,晚上8:10

    瑞安–我的朋友,你要爬上一座高高的小山!
    假设终端为根:
    光盘/ usr / ports / sysutils / 对数旋转
    进行安装
    使clean
    cd / usr / local / etc /
    纳米logrotate.conf
    这篇文章基本上是从这里开始的。

  • 瑞安 2014年2月5日,下午1:10

    嗨艾克斯,

    谢谢。当我尝试进行make install等时,得到:

    serv01#清洁
    ===>清洁logrotate-3.8.7
    serv01#使依赖
    serv01# 进行安装 clean
    ===>提取logrotate-3.8.7所需的所有distfile进行构建
    ===>为logrotate提取3.8.7
    =>SHA256校验和为logrotate-3.8.7.ta​​r.gz确定。
    ===>修补logrotate-3.8.7
    ===>为logrotate-3.8.7应用FreeBSD补丁
    ===>logrotate-3.8.7取决于可执行文件:gmake– found
    ===>logrotate-3.8.7取决于共享库:libpopt.so– found
    ===>配置logrotate-3.8.7
    ===>建立logrotate-3.8.7
    cc -E -Wall -D_GNU_SOURCE -DFreeBSD -DVERSION = \”3.8.7\”-I / usr / local / include -I / usr / local / include -g -M 对数旋转.c log.c config.c基本名称.c> .depend
    cc -Wall -D_GNU_SOURCE -DFreeBSD -DVERSION = \”3.8.7\”-I / usr / local / include -I / usr / local / include -g -c -o 对数旋转.o 对数旋转.c
    cc -Wall -D_GNU_SOURCE -DFreeBSD -DVERSION = \”3.8.7\”-I / usr / local / include -I / usr / local / include -g -c -o log.o log.c
    cc -Wall -D_GNU_SOURCE -DFreeBSD -DVERSION = \”3.8.7\”-I / usr / local / include -I / usr / local / include -g -c -o config.o config.c
    cc -Wall -D_GNU_SOURCE -DFreeBSD -DVERSION = \”3.8.7\”-I / usr / local / include -I / usr / local / include -g -c -o basenames.o basenames.c
    回声“0” > ./test/test.ACL ;
    回声“0” >./test/test.SELINUX;
    cc -g 对数旋转.o log.o config.o基本名称.o -lpopt -L / usr / local / lib -L ​​/ usr / local / lib -o 对数旋转
    ===>进行logrotate 3.8.7的分期
    ===>生成临时装箱单
    [-d / usr / local / sbin] || mkdir -p / usr / local / sbin
    [-d / usr / local / man] || mkdir -p / usr / local / man
    [-d / usr / local / man / man8] || mkdir -p / usr / local / man / man8
    [-d / usr / local / man / man5] || mkdir -p / usr / local / man / man5
    如果[“FreeBSD” = HP-UX ]; then \
    对数旋转 / usr / local / sbin 0755斌斌; \
    对数旋转.8 / usr / local / man / man`echo 对数旋转.8 | sed“s/.*\.//”` 0644 bin bin; \
    对数旋转.conf.5 / usr / local / man / man`cho 对数旋转.conf.5 | sed“s/.*\.//”` 0644 bin bin; \
    else 如果[“FreeBSD” = FreeBSD ]; then \
    安装-s -o root -g wheel -m 555 对数旋转 / usr / ports / sysutils / 对数旋转 / work / stage / usr / local / sbin; \
    安装-o root -g wheel -m 444 对数旋转.8 / usr / ports / sysutils / 对数旋转 / work / stage / usr / local / man / man`echo 对数旋转.8 | sed“s/.*\.//”`/logrotate.8; \
    安装-o root -g wheel -m 444 对数旋转.conf.5 / usr / ports / sysutils / 对数旋转 / work / stage / usr / local / man / man`echo 对数旋转.conf.5 | sed“s/.*\.//”`/logrotate.conf.5; \
    else \
    -m 755 对数旋转 / usr / local / sbin; \
    -m 644 对数旋转.8 / usr / local / man / man`echo 对数旋转.8 | sed“s/.*\.//”`/logrotate.8; \
    -m 644 对数旋转.conf.5 / usr / local / man / man`echo 对数旋转.conf.5 | sed“s/.*\.//”`/logrotate.conf.5; \
    fi; fi
    ====>压缩手册页(compress-man)
    ===>logrotate-3.8.7的构建包
    创建软件包/usr/ports/sysutils/logrotate/work/logrotate-3.8.7.tbz
    注册取决于:popt-1.16 gettext-0.18.1.1 libiconv-1.13.1_1。
    创建bzip’d tar ball in ‘/usr/ports/sysutils/logrotate/work/logrotate-3.8.7.tbz’
    ===>安装logrotate-3.8.7
    ===>检查是否已安装sysutils / 对数旋转
    ===>logrotate-3.8.7已安装
    您可能希望“make deinstall”并再次安装此端口
    通过 “make reinstall”正确升级。
    如果您真的想覆盖sysutils / 对数旋转的旧端口
    无需先删除它,设置变量“FORCE_PKG_REGISTER”
    在您的环境或“make install” command line.
    ***错误代码1

    但是因为它说它已经安装了,所以只要“picking up from 这里”如您所说应该工作?对?在此先感谢您指出一些明显的内容。

  • 苛刻 2014年5月19日,上午4:25

    在postrotate块中,是否可以编写ruby脚本而不是shell脚本?另外,将1,2,3作为生成文件的后缀,我想用时间戳重命名它们,我也想将所有这些文件移动到另一个目录。
    拥有这些功能的最佳方法是什么?

  • 拉姆基 2015年1月29日,上午12:57

    嗨,

    我可以在日志轮转配置文件中使用$ HOSTNAME,它可以正常工作吗?

    /d/xy/sssnr/$HOSTNAME/trace/ssnr.log {
    旋转5
    压缩
    大小10M
    Missingok
    创建0600根根
    }

  • 朱尼德·阿里(Junaid Ali) 2015年1月29日,上午5:20

    谢谢拉梅什

  • 拉杰库玛·亚达夫(Rajkumar Yadav) 2015年4月23日,上午5:30

    你好

    谁能帮我配置日志轮换。我想每两分钟旋转一次/ var / log / message,并且将其压缩
    请提供正确的命令和文件名。

  • 巴斯卡 2015年8月19日,上午12:10

    使用logrotate.conf脚本旋转日志文件。旋转新文件后,旧文件不会被截断。请任何人帮助解决这个问题。
    谢谢

  • 西弗勒斯·斯内普 2015年12月16日,上午11:06

    嗨Rajkumar。

    您的答案如下:

    /etc/logrotate.conf:
    压缩
    每两分钟

    然后跑
    expelliarmus /etc/logrotate.conf> harrypotter.txt
    使&& 使clean
    别名avadakedavra =’rm -rf wizards/’
    阿瓦达克达夫拉
    登出

    让我知道这是怎么回事。

  • 兰海森 一月5,2016,9:03下午

    Very helpful. Your 文章 help me resolve my problem(After I run command line 对数旋转, my service do not write log to server). I using 复制截断 option to resole that. Thank you so much

  • 巴拉吉 2016年1月29日,上午8:02

    错误:
    对数旋转:ALERT异常退出,显示为[1]
    如何解决这个问题

  • 哈克 2016年6月24日,下午3:12

    非常感谢!

  • 拉克希米 2017年4月26日,上午8:09

    嗨,巴拉

    我正在使用logrotate来限制catalina.out和localhost_access_log.YYYY-MM-DD.txt。

    这是代码

    /var/log/tomcat8/catalina.out
    /var/log/tomcat8/localhost_access_log.*.txt {
        复制截断
        rotate 10
        size 100M
        压缩
        Missingok
        maxage 10
        创建700 root root
    }
    

    输出为
    -rwxrwxrwx 1 tomcat tomcat 12M 4月26日13:15 catalina.out
    -rwxrwxrwx 1 tomcat tomcat 1.8M Apr 21 06:01 catalina.out-20170421.gz
    -rwxrwxrwx 1 tomcat tomcat 2.6M 4月23日09:01 catalina.out-20170423.gz
    -rwxrwxrwx 1 tomcat tomcat 3.3M Apr 25 01:01 catalina.out-20170425.gz
    -rwxrwxrwx 1 tomcat tomcat 3.0M 4月26日07:01 catalina.out-20170426.gz
    -rwxrwxrwx 1 tomcat tomcat 47M 4月24日16:01 localhost_access_log.2017-04-24.txt-20170424.gz
    -rwxrwxrwx 1雄猫雄猫376M 4月25日00:02 localhost_access_log.2017-04-24.txt-20170425.gz
    -rw-r–r–1 tomcat tomcat 0 Apr 26 00:01 localhost_access_log.2017-04-25.txt
    -rw-r–r–1个tomcat tomcat 48M Apr 25 01:01 localhost_access_log.2017-04-25.txt-20170425.gz
    -rw-r–r–1个tomcat tomcat 1.1G Apr 26 00:03 localhost_access_log.2017-04-25.txt-20170426.gz
    -rw-r–r–1个tomcat tomcat 2.5G Apr 26 13:15 localhost_access_log.2017-04-26.txt
    -rw-r–r–1个tomcat tomcat 48M Apr 26 01:01 localhost_access_log.2017-04-26.txt-20170426.gz

    问题是文件名附带日期而不是旋转顺序,并且100MB限制仅适用于catalina,不适用于localhost_access_log。好心劝告。谢谢。

  • 萨吉特 三月12,2019,12:50上午

    谢谢你的优秀&内容翔实的文章,借助cron,我可以查询与特定syslog文件的内部整理(压缩/旋转/删除)相关的信息&按小时对数旋转。

    我想到将logrotate从/etc/cron.daily/移到/etc/cron.hourly,但这也会影响系统中的每个日志。

    但是我想按小时轮换特定的syslog文件,休息一下以保持惯常的方式(每天),例如–

    1.每小时特定日志(var / log / NIPFW / MX480 / *。log)
    2.其余日志(/ var / log / *等)按常规方式(每天)

    感谢您的意见/建议。

发表评论