【随笔记】Linux logrotate 日志切割、日志分割工具、管理记录文件命令

在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)时,大多数服务器进程(所有常用的进程)都会进行复位操作并重新加载它们的配置文件。

你可能感兴趣的:(Deepin,linux,nginx,服务器)