场景:当nginx中的acces.log日志达到1G以上级别以上,会造成占用大量磁盘空间,造成必须要的浪费,当超过磁盘空间,会造成其他服务受到影响,导致不可用。
第一步:编写脚本
创建日志存放路径:mkdir /mnt/log/nginx_log
创建脚本存放路径: mkdir /mnt/nginx_task_script
新增脚本:touch nginx_log_script.sh
下载地址
#/bin/bash
#Email:[email protected]
yesterday=$(date +%Y-%m-%d) #取得服务器当前时间
savepath_log='/mnt/log/nginx_log/accesslogs' #分割后的日志文件保存目录(注意结尾目录斜杠去掉)
nglogs='/usr/local/nginx/logs' #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_script.sh
如果想看到结果立马执行命令: sh nginx_log_script.sh
第二步:设置定时任务
crontab -e
新增记录:59 23 * * * /mnt/nginx_task_script/nginx_log_script.sh
当我们编辑完定时任务过后,记得重载一遍crond,只有重载了才有效
systemctl reload crond.service
重启crond服务:systemctl restart crond.service
结果如下: