在linux 下使用nginx做反向代理,由于访问量还是比较大,生成的日志文件较大,这是想到使用logrotate命令对生成的日志文件进行管理,自动打成gz包留存日志好追溯问题。
logrotate的基本语法
logrotate -fv /etc/logrotate.d/[配置文件名称]
- -?或者–help 可以看到logrotate的基本用法
- -d 是debug模式,显示执行过程,检查执行配置文件中的语法,但不会真是执行
- -f或者是–force 强制启动记录文件维护操作
- -s或者是–state 状态文件
- -v或者–version 显示执行过程
实例
我这里是要管理nginx的日志文件,例如access.log
- 首先我要做的是启动nginx,然后记录下nginx的pid文件位置
bird@bird-PC cd /use/local/nginx/logs
bird@bird-PC /u/l/n/logs> ls
access.log error.log nginx.pid
- 然后配置logrotate的配置文件,该配置文件在/etc/logrotate.d目录下
bird@bird-PC cd /etc/logrotate.d
- 可以看到该目录下已经有很多任务了,每一个文件都是一个任务的配置文件
我们也创建nginx的任务配置文件
bird@bird-PC touch nginx
bird@bird-PC sudo vi nginx
- 然后在nginx配置文件中开始我们的配置
/usr/local/nginx/logs/access.log{
daily
rotate 1
missingok
notifempty
compress
postrotate
/bin/kill -USR1 `cat /usr/local/nginx/logs/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
需要注意的是这里面的一些执行参数
-
daily 指转储周期为每天,还有weekly、monthly、yearly
-
rotate指一期将存储的文件归档,我这里后面写的是1,1个日志文件就开始归档
-
compress在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
-
delaycompress总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
-
missingok在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
-
notifempty如果日志文件为空,轮循不会进行。
-
create 644 root root以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
-
postrotate/endscript在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
-
创建完毕后手动执行我们的配置文件
sudo logrotate -fv /etc/logrotate.d/nginx
修改logrotate执行时间
通过查询资料,logrotate是局域CRON运行的,那么就可以在/etc/下去搜一搜CRON
Deepin系统 /etc/cron.d
CentOS系统/etc/anacrontab
这里以Deepin为例,我使用的是Deepin20.4社区版本
bird@bird-PC /e/cron.d> cat nginx
57 0 * * 0 root /usr/sbin/logrotate -vf /etc/logrotate.d/nginx --cron --all --idle --quiet;
现在是每天晚上00:57执行
修改完配置文件, 重载定时执行下面的命令重新加载定时配置完成
sudo service crond reload
附录
关于上面配置文件中写的USR1信号
摘自: http://www.xuebuyuan.com/323422.html
USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。内容摘自wiki:http://zh.wikipedia.org/wiki/SIGUSR1%E5%92%8CSIGUSR2
对于USR1和2都可以用户自定义的,在POSIX兼容的平台上,SIGUSR1和SIGUSR2是发送给一个进程的信号,它表示了用户定义的情况。它们的符号常量在头文件signal.h中定义。在不同的平台上,信号的编号可能发生变化,因此需要使用符号名称。
kill -HUP pid 或者 killall -HUP pName:
其中pid是进程标识,pName是进程的名称。
如果想要更改配置而不需停止并重新启动服务,可以使用上面两个命令。在对配置文件作必要的更改后,发出该命令以动态更新服务配置。根据约定,当你发送一个挂起信号(信号1或HUP)时,大多数服务器进程(所有常用的进程)都会进行复位操作并重新加载它们的配置文件。