我发现很多人的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!

Logrotate的介绍

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。
logrotate 程序还可以用于压缩日志文件,以及发送日志到指定的E-mail 。
显而易见,Logrotate是基于CRON来运行的,其脚本是「/etc/cron.daily/logrotate」:
  1. [caoxiaojian@web1 etc]$ cat /etc/cron.daily/logrotate
  2. #!/bin/sh
  3. /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
  4. EXITVALUE=$?
  5. if [ $EXITVALUE != 0 ]; then
  6. /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
  7. fi
  8. exit 0
实际运行时,Logrotate会调用配置文件「/etc/logrotate.conf」:
  1. [caoxiaojian@web1 etc]$ cat /etc/logrotate.conf
  2. # see "man logrotate" for details
  3. # rotate log files weekly
  4. weekly
  5. # keep 4 weeks worth of backlogs
  6. rotate 4
  7. # create new (empty) log files after rotating old ones
  8. create
  9. # use date as a suffix of the rotated file
  10. dateext
  11. # uncomment this if you want your log files compressed
  12. #compress
  13. # RPM packages drop log rotation information into this directory
  14. include /etc/logrotate.d
  15. # no packages own wtmp and btmp -- we'll rotate them here
  16. /var/log/wtmp {
  17. monthly
  18. create 0664 root utmp
  19. minsize 1M
  20. rotate 1
  21. }
  22. /var/log/btmp {
  23. missingok
  24. monthly
  25. create 0600 root utmp
  26. rotate 1
  27. }
  28. # system-specific logs may be also be configured here.
这里的设置可以理解为Logrotate的缺省值,当然了,可以我们在「/etc/logrotate.d」目录里放置自己的配置文件,用来覆盖Logrotate的缺省值。

Logrotate的演示

按天保存一周的Nginx日志压缩文件,配置路径为:/etc/logrotate.d,创建一个nginx的文件
  1. /usr/local/nginx/logs/*.log {
  2. daily
  3. dateext
  4. compress
  5. rotate 7
  6. sharedscripts
  7. postrotate
  8. kill -USR1 `cat /var/run/nginx.pid`
  9. endscript
  10. }
如果你等不及CRON,可以通过如下命令来手动执行:
  1. [caoxiaojian@web1 etc]$ logrotate -f /etc/logrotate.d/nginx
当然,正式执行前最好通过Debug选项来验证一下,这对调试也很重要:
  1. [caoxiaojian@web1 etc]$ logrotate -d -f /etc/logrotate.d/nginx

参数 功能

compress 通过gzip 压缩转储以后的日志
 
nocompress 不需要压缩时,用这个参数
 
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
 
nocopytruncate 备份日志文件但是不截断
 
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
 
nocreate 不建立新的日志文件
 
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
 
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
 
errors address 专储时的错误信息发送到指定的Email 地址
 
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
 
notifempty 如果是空文件的话,不转储
 
mail address 把转储的日志文件发送到指定的E-mail 地址
 
nomail 转储时不发送日志文件
 
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
 
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
 
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
 
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
 
daily 指定转储周期为每天
 
weekly 指定转储周期为每周
 
monthly 指定转储周期为每月
 
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
 
tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
 
size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).

Logrotate的疑问

问题:sharedscripts的作用是什么?

大家可能注意到了,我在前面Nginx的例子里声明日志文件的时候用了星号通配符,也就是说这里可能涉及多个日志文件,比如:access.log和error.log。说到这里大家或许就明白了,sharedscripts的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。

官方配置解析











Logrotate还有谁记得它??的更多相关文章

  1. [转] 被遗忘的Logrotate

    FROM : http://huoding.com/2013/04/21/246 我发现很多人的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相 ...

  2. 被遗忘的 Logrotate

    转自: http://huoding.com/2013/04/21/246 被遗忘的 Logrotate 发表于 2013-04-21 我发现很多人的服务器上都运行着一些诸如每天切分 Nginx 日志 ...

  3. 利用logrotate工具对catalina.out进行日志分割实战

    logrotate是linux自带的日志分割工具,如果没有可以用yum安装 yum -y install logrotate 要配置日志分割定时任务,需要在/etc/logrotate.d/下创建一个 ...

  4. QT,静态变量要记得初始化

    //DbUtil.h #ifndef DBUTIL_H #define DBUTIL_H using namespace std; QString md5Encode(QString passwd); ...

  5. 使用logrotate分割Tomcat的catalina日志

    切割catalian日志的方式有很多种,比如shell脚本的.cronolog或者通过配置log4j等等这些都可以实现.但今天我要介绍是使用logrotate来按日期生成日志. 原文是一个外国博主的文 ...

  6. c#静态构造函数 与 构造函数 你是否还记得?

    构造函数这个概念,在我们刚开始学习编程语言的时候,就被老师一遍一遍的教着.亲,现在你还记得静态构造函数的适用场景吗?如果没有,那么我们一起来复习一下吧. 静态构造函数是在构造函数方法前面添加了stat ...

  7. rsyslog及logrotate小结

    [root@node1 logrotate.d]# ls dracut haproxy httpd mcelog nginx ppp psacct syslog yum   yum install n ...

  8. 记得初学JS时候练个九九乘法表都写的要死要活

    还记得当初刚接触JS时候,看到视频中老师写了个九九乘法表,觉得好神奇,可是自己在下面动手写了半天还是有各种问题,甚是懊恼啊.今又看到园子里有关于乘法表的博文,出于对过去的不舍与缅怀,遂重写一遍. &l ...

  9. logrotate

    logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用.可以节省磁盘空间. logrotate命令格式:logrot ...

随机推荐

  1. 第一次玩github,第一个开源小项目——xxoo

    引言 由于最近的工作写代码比较少,这让LZ产生了一丝危机感.于是便想找一个办法可以没事自己写写代码,自然而然就想到了github.接下来便是一阵捣鼓的过程,其实整个过程很快,主要过程就是注册一个账号, ...

  2. Pyhton配置CGI

    目录 CGI配置(Mac版) 添加CGI python文件测试 CGI--common gateway interface 通用网关接口的意思,本文通过python的CGI来整体了解下CGI的配置和使 ...

  3. Unity扩展编辑器四

    Inspector视图中的get/set使用 get  set使用起来很方便,但编辑时,在Inspector视图中问题就来了,因为get/set的属性即使是public了,但是在Inspector视图 ...

  4. 解决网速慢时maven仓库访问慢

    构建maven项目时会下载很多依赖,会从官网地址下载是个外国网站,访问速度会很慢,但可以通过修改maven的settings.xml文件换成国内的镜像地址就可以加快访问速度: 一.找到settings ...

  5. java IO流 对文件操作的代码集合

    Io流 按照分类 有两种分类 流向方向: 有输入流和输出流 按照操作类型有:字节流和字符流 按照流向方向 字节流的一些操作 //读文件 FileInputStream fis = new FileIn ...

  6. 笔记:《机器学习训练秘籍》——吴恩达deeplearningai微信公众号推送文章

    说明 该文为笔者在微信公众号:吴恩达deeplearningai 所推送<机器学习训练秘籍>系列文章的学习笔记,公众号二维码如下,1到15课课程链接点这里 该系列文章主要是吴恩达先生在机器 ...

  7. Leetcode_3. Find the longest substring without repeating characters

    3. Find the longest substring without repeating characters Given a string, find the length of the lo ...

  8. AutoResetEvent 方法名称设计缺陷

    这个类和方法,让人乍一读是读不明白的.不能通过方法名称明白其含义.所以它的方法名称设计是欠考虑. 应该类似于这样: public static class MyAutoResetEvent { pub ...

  9. SpringMvc跨域支持

    SpringMvc跨域支持 在controller层加上注解@CrossOrigin可以实现跨域 该注解有两个参数 1,origins  : 允许可访问的域列表 2,maxAge:飞行前响应的缓存持续 ...

  10. Daily Scrum 11.7

    明后两天周六日,按照TFS的日常安排应该是休息,所以让他们自由完成已经分配的任务. 姓名 今日任务 黄新越 提取爬取网页的关键字并输出到接口 刘垚鹏 程序总架构的修改与多线程的学习 王骜 多线程学习 ...