Nginx 笔记与总结(5)访问日志管理:计划任务 + 日志切割

要在第二天的凌晨把前一天的访问日志切割备份,并以时间作为文件名,例如:access.20150728.log,这就需要在 Linux 中格式化时间,例如:

[root@localhost ~]#  date
2015年 07月 28日 星期二 02:33:02 CST
 
[root@localhost ~]# date -d yesterday
2015年 07月 27日 星期一 02:33:18 CST

[root@localhost ~]# date -d yesterday +%Y
2015

[root@localhost ~]# date -d yesterday +%y
15

[root@localhost ~]# date -d yesterday +%Y%m%d
20150727

编写 shell 脚本

在根目录下创建 data 目录,用于存放 shell 脚本

mkdir /data

进入 /data 目录,创建 runlog.sh:

cd /data
vim runlog.sh

【测试】 .sh 文件:

echo `date -d yesterday +%Y%m%d`

或者

[root@localhost data]# vim runlog.sh
echo $(date -d yesterday +%Y%m%d)

  

保存退出

  

然后运行该脚本:

[root@localhost data]# sh runlog.sh 
20150727

测试结束。

 

【测试2】

输出备份后的文件路径

vim runlog.sh

runlog.sh:

[root@localhost data]# vim runlog.sh

bak=$BASELOG/$(date -d yesterday +%Y%m%d)
LOGPATH=/usr/local/nginx/logs/dee.com.access.log
BASELOG=/data

bak=$BASELOG/$(date -d yesterday +%Y%m%d%H%M).dee.com.access.log
echo $bak

保存退出。

 

运行 runlog.sh :

[root@localhost data]# sh runlog.sh 
/data/201507270317.dee.com.access.log

测试结束。

 

定义了备份后的文件路径之后,需要把原来的日志文件剪切到新的路径,同时新建一个访问日志文件,最后使用 nginx 信号控制中的 USR1 来完成日志切割:

vim runlog.sh

runlog.sh:

LOGPATH=/usr/local/nginx/logs/dee.com.access.log
BASELOG=/data

bak=$BASELOG/$(date -d yesterday +%Y%m%d%H%M).dee.com.access.log

mv $LOGPATH $bak
touch $LOGPATH

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

  

保存退出。

创建计划任务(每分钟执行 1 次):

crontab -e

*/1 * * * * sh /data/runlog.sh

保存退出。

此时 /data 目录下的文件:

  

  

1 min 之后:

  

2 min 之后:

  

浏览文件:

  

如果要把日志按照年月放进不同的路径下,可以:

vim runlog.sh

runlog.sh:

LOGPATH=/usr/local/nginx/logs/dee.com.access.log
BASEPATH=/data/$(date -d yesterday +%Y%m)

mkdir -p $BASEPATH

bak=$BASEPATH/$(date -d yesterday +%d%H%M).dee.com.access.log

mv $LOGPATH $bak
touch $LOGPATH

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

  

保存退出。

此时,有了 201507 的目录:

  

目录下保存了最新的 log 文件,格式为:*日*时*分

  

  

原文地址:https://www.cnblogs.com/dee0912/p/4677697.html