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配置文件里,比如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/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 ;
最后的最后,如果您觉得本文对您升职加薪迎娶白富美有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多优秀的博文!
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1944073