首页 > 代码库 > 关于logrotate的额外补充

关于logrotate的额外补充

http://chenx1242.blog.51cto.com/10430133/1942514 里面已经简单介绍了logrotate命令,这里还有一些额外补充的东西:


1)查看logrotate对log文件的具体执行情况的语句是#cat /var/lib/logrotate.status,效果如图:

技术分享


2)使用-v或-d参数时,显示“log does not need rotating",这是因为logrotate在对status未记录的文件进行转储时,会在status添加一条该文件的记录,并将操作时间设为当天。之后程序再次对此文件进行转储时发现这个文件今天已经操作过,就不再进行相关操作。要是想解决这个问题可以"使用-s指定logrotate状态文件";


3)分割日志时报错:“error: skipping "/var/log/nginx/test.access.log" because parent directory has insecure permissions (It‘s world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.”这是当前用户不是root,需要添加“su root list“这个语句到对应的logrotate配置文件里,比如:

/var/log/nginx/*.log {
        su root list
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        #ifempty
        create 0640 www-data adm
        sharedscripts
        postrotate
                [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
        endscript
}


4)如果觉得使用logrotate很麻烦,而当某个文件过大的时候,要实现把该文件压缩并且拆成若干个指定大小的文件,怎么办?

tar -zcvf 新文件名.tar.gz 原文件名 | split -b 每个分格包大小 -d -a 1 - 新文件名.tar.gz

比如:#tar -zcvf ABC.tar.gz ABC | split -b 4000M -d -a 1 - ABC.tar.gz.   这个命令就是把ABC这个文件压缩成ABC.tar.gz,但是如果ABC大于4000M就会切块,切成ABC.tar.gz.0,ABC.tar.gz.1,ABC.tar.gz.2......这个样子。

//使用split命令,-b 4000M 表示设置每个分割包的大小,单位还是可以k

// -d "参数指定生成的分割包后缀为数字的形式

//-a x来设定序列的长度(默认值是2),这里设定序列的长度为1

如果要把这一堆已经切块的文件重新接压缩的命令:#cat ABC.tar.gz.* | tar -zxv ;


5)如果用 kill -HUP来重启一个包含守护进程的进程,比如httpd,一条语句搞定:

ps -ef | grep httpd | grep -v grep | awk ‘{ print $2; }‘ | xargs -L 1 sudo kill -HUP

这里面首先用 awk获取到httpd的pid进程号,然后把这个进程号传给了xargs,通过-L 1来一次提取一行pid值,然后分批进行kill -HUP;


6)想更多的了解守护进程,参看http://www.cnblogs.com/mickole/p/3188321.html ;

本文出自 “生活就是等待戈多” 博客,请务必保留此出处http://chenx1242.blog.51cto.com/10430133/1944073

关于logrotate的额外补充