要在第二天的凌晨把前一天的访问日志切割备份,并以时间作为文件名,例如: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 文件,格式为:*日*时*分