nginx日志切割工具logrotate若干问题
2017-03-07 00:00
766 查看
logrotate默认的切分方式:
1.create方式:重命名原日志文件,创建新的日志文件。
a.重命名当前程序正在输出的日志的名称。因为重新命名只会修改目录文件的内容,而进程操作文件靠的是inode编号,所以不影响程序继续输出日志。
例如:原本日志文件nginx_a.log, nginx向nginx_a.log写入日志,把nginx_a.log重新命名为nginx_b.log,这个时候就想nginx_b.log写入日志,两者的inode如下所示:
root@ubuntu:/tmp# stat nginx_a.log
File: ‘nginx_a.log’
Size: 360 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1175153 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-30 11:47:53.435271360 +0800
Modify: 2016-12-30 11:48:00.455328512 +0800
Change: 2016-12-30 11:48:00.455328512 +0800
Birth: -
nginx@ubuntu:/tmp$ stat nginx_b.log
File: ‘nginx_b.log’
Size: 2500 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1175153 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-30 11:49:39.573216807 +0800
Modify: 2016-12-30 11:49:47.581329002 +0800
Change: 2016-12-30 11:49:47.581329002 +0800
Birth: -
从上面的信息可以看出,虽然是重命名了,但是两个文件使用都是同一个inode,nginx使用inode来写入日志信息
b.创建新的日志文件,名字和原来的日志文件的名称相同。虽然新的文件的名称和原来的文件的名字相同,但是inode编号不同,所以程序的输出还是到原来的日志文件。
重新创建nginx_a.log文件,inode信息如下所示:
nginx@ubuntu:/tmp$ stat nginx_a.log
File: ‘nginx_a.log’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 1175164 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ nginx) Gid: ( 1000/ nginx)
Access: 2016-12-30 11:56:29.570152511 +0800
Modify: 2016-12-30 11:56:29.570152511 +0800
Change: 2016-12-30 11:56:29.570152511 +0800
Birth: -
通过上述的信息,可以发现虽然是和之前文件的名称相同都是nginx_a.log,但是已经是不同的inode。
c.通过某种方式通知原来的程序,重新启动打开日志文件。程序重新打开日志文件,靠的是文件路径而不是inode编号,所以重新打开的就是新的日志文件。
nginx重新加载配置文件 nginx -s reload 或者 kill -HUP $nginx_pid,这个时候就重新使用nginx_a.log文件,也就是继续往nginx_a.log写日志了。
nginx提供了重新生成日志文件的方式:kill -USR1 $nginx_pid
2.copytrucate方式:用于还在打开中的日志文件,将当前的日志文件备份并且截断,该种方式有可能会丢失部分的日志
1.create方式:重命名原日志文件,创建新的日志文件。
a.重命名当前程序正在输出的日志的名称。因为重新命名只会修改目录文件的内容,而进程操作文件靠的是inode编号,所以不影响程序继续输出日志。
例如:原本日志文件nginx_a.log, nginx向nginx_a.log写入日志,把nginx_a.log重新命名为nginx_b.log,这个时候就想nginx_b.log写入日志,两者的inode如下所示:
root@ubuntu:/tmp# stat nginx_a.log
File: ‘nginx_a.log’
Size: 360 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1175153 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-30 11:47:53.435271360 +0800
Modify: 2016-12-30 11:48:00.455328512 +0800
Change: 2016-12-30 11:48:00.455328512 +0800
Birth: -
nginx@ubuntu:/tmp$ stat nginx_b.log
File: ‘nginx_b.log’
Size: 2500 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1175153 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-30 11:49:39.573216807 +0800
Modify: 2016-12-30 11:49:47.581329002 +0800
Change: 2016-12-30 11:49:47.581329002 +0800
Birth: -
从上面的信息可以看出,虽然是重命名了,但是两个文件使用都是同一个inode,nginx使用inode来写入日志信息
b.创建新的日志文件,名字和原来的日志文件的名称相同。虽然新的文件的名称和原来的文件的名字相同,但是inode编号不同,所以程序的输出还是到原来的日志文件。
重新创建nginx_a.log文件,inode信息如下所示:
nginx@ubuntu:/tmp$ stat nginx_a.log
File: ‘nginx_a.log’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 1175164 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ nginx) Gid: ( 1000/ nginx)
Access: 2016-12-30 11:56:29.570152511 +0800
Modify: 2016-12-30 11:56:29.570152511 +0800
Change: 2016-12-30 11:56:29.570152511 +0800
Birth: -
通过上述的信息,可以发现虽然是和之前文件的名称相同都是nginx_a.log,但是已经是不同的inode。
c.通过某种方式通知原来的程序,重新启动打开日志文件。程序重新打开日志文件,靠的是文件路径而不是inode编号,所以重新打开的就是新的日志文件。
nginx重新加载配置文件 nginx -s reload 或者 kill -HUP $nginx_pid,这个时候就重新使用nginx_a.log文件,也就是继续往nginx_a.log写日志了。
nginx提供了重新生成日志文件的方式:kill -USR1 $nginx_pid
2.copytrucate方式:用于还在打开中的日志文件,将当前的日志文件备份并且截断,该种方式有可能会丢失部分的日志
相关文章推荐
- 日志切割工具logrotate解决Tomcat catalina.out日志过大的问题
- Apache自带日志切割工具Logrotate和maxage
- Linux的日志文件管理工具——logrotate(linux日志切割与轮循)
- nginx利用logrotate日志切割
- logrotate日志管家来切割日志(tomcat,nginx,httpd的日志)
- 利用logrotate系统工具切割tomcat日志
- MySQL日志切割工具logrotate
- logrotate 切割 nginx php mysql 日志
- logrotate切割nginx日志
- 使用logrotate工具切割MySQL日志与慢日志分析发送到邮箱
- 使用logrotate做的nginx日志切割
- 利用logrotate切割nginx日志
- centos自带的日志切割工具 --- logrotate
- rsyslog、logrotate切割保存日志日期不准确的问题
- MySQL日志切割工具logrotate
- 利用Centos6系统自带的logrotate切割nginx日志
- 利用logrotate系统工具切割tomcat日志
- 切割日志(mysql,nginx,php tomcat)使用logrotate
- nginx日志不记录及日志切割
- centOS 6 使用logrotate归档 nginx大日志