场景:当nginx中的acces.log日志达到1G以上级别以上,会造成占用大量磁盘空间,造成必须要的浪费,当超过磁盘空间,会造成其他服务受到影响,导致不可用。

第一步:编写脚本

创建日志存放路径:mkdir /home/logs/nginx
创建脚本存放路径:?mkdir? /var/log/nginx
新增脚本:touch nginx_log_scirpt.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#/bin/bash

yesterday=$(date +%Y-%m-%d) #取得服务器当前时间

savepath_log='/home/logs/nginx' #分割后的日志文件保存目录(注意结尾目录斜杠去掉)

nglogs='/var/log/nginx' #nginx日志文件目录,具体根据实际地址替换(结尾目录斜杠去掉 以免与下面路径中的"/"重复)



#判断分割日志保存目录是否存在不存在则创建

if [ ! -d ${savepath_log} ] # 注意 语句之间 空格不可省略,这是bash脚本 不是php脚本那样随和

then

mkdir -p ${savepath_log}

fi

#通过mv命令将日志移动到分割后的日志目录里,然后发送kill -USR1信号给Nginx的主进程号,让Nginx重新生成一个新的日志文件。

mv ${nglogs}/access.log ${savepath_log}/access_${yesterday}.log #具体根据你的实际日志文件名路径 进行修改access.log名字

mv ${nglogs}/error.log ${savepath_log}/error_${yesterday}.log #具体根据实际日志文件名地址 修改error.log名字

#mv ${nglogs}/host.access.log ${savepath_log}/host.access_${yesterday}.log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid) #通知nginx重新生成新的日志

赋予脚本权限 : chmod +r nginx_log_scirpt.sh
如果想看到结果立马执行命令: sh nginx_log_scirpt.sh

第二步:设置定时任务

crontab -e
新增记录:59?23?* * * /var/log/nginx/nginx_log_scirpt.sh
当我们编辑完定时任务过后,记得重载一遍crond,只有重载了才有效
systemctl reload crond.service

重启crond服务:systemctl restart crond.service

结果如下: