要在第二天的凌晨把前一天的访问日志切割备份,并以时间作为文件名,例如:access.20150728.log,这就需要在 Linux 中格式化时间,例如:
[[email protected] ~]# date 2015年 07月 28日 星期二 02:33:02 CST [[email protected] ~]# date -d yesterday 2015年 07月 27日 星期一 02:33:18 CST [[email protected] ~]# date -d yesterday +%Y 2015 [[email protected] ~]# date -d yesterday +%y 15 [[email protected] ~]# 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`
或者
[[email protected] data]# vim runlog.sh echo $(date -d yesterday +%Y%m%d)
保存退出
然后运行该脚本:
[[email protected] data]# sh runlog.sh 20150727
测试结束。
【测试2】
输出备份后的文件路径
vim runlog.sh
runlog.sh:
[[email protected] 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 :
[[email protected] 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 文件,格式为:*日*时*分
时间: 2024-10-05 22:49:39