Nginx日志切割脚本实践

因为nginx存放的日志文件逐渐增大,导致日后想察看某个时间的日志的时候,打开巨大文件所带来的性能代价和时间定位查找麻烦,因此需要对日志文件按照时间和频率进行切割。切割过程如下:

  1. 创建当前时间目录,比如年/月目录
  2. 然后将当前指定的日志,剪切到该创建好的目录下
  3. 重启nginx服务,重新生成0kb大小的新日志文件
  4. 通过计划任务,周期性执行以上切割日志,重新生成日志的操作就能达到既让日志文件保持一定大小而且又能按照指定的时间格式和目录进行存放。方面查询的便利和文件打开的快速。

切割脚本代码如下:

 1 #!/bin/bash
 2
 3 #原nginx日志存放路径
 4 log_files_path="/home/wwwlogs/"
 5
 6 #nginx切割后存放路径
 7 log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
 8
 9 #待切割日志名称集合如access.log error.log
10 log_files_name=(access error)
11
12 #nginx启动脚本路径
13 nginx_sbin="/usr/local/nginx/sbin/nginx"
14
15 #日志保存时间
16 save_days=30
17
18 #创建存放目录
19 mkdir -p $log_files_dir
20
21 log_files_num=${#log_files_name[@]}
22
23 #循环切割日志
24 for((i=0;i<$log_files_num;i++));do
25 mv ${log_files_path}${log_files_name[i]}.log ${log_files_dir}/${log_files_name[i]}_$(date -d "yesterday" +"%Y%m%d").log
26 done
27
28 #删除超过30天的日志文件
29 find $log_files_path -mtime +$save_days -exec rm -rf {} \;
30
31 #重启nginx服务,重新生成新的文件
32 $nginx_sbin -s reload

脚本放好后,接下来就可以创建一个计划任务来执行这个脚本,首先给这个脚本授予可执行权限:

chmod +x cut_nginx_logs.sh

然后创建计划任务:

[email protected]:~$ crontab -e

添加一行任务:

00 00 * * * /bin/bash /home/crontab/cut_nginx_logs.sh
时间: 2024-10-12 12:16:44

Nginx日志切割脚本实践的相关文章

nginx日志切割脚本,python实现

# 自搭建了个人博客 有需要交流学习的可以访问 www.wpython.com #!/usr/bin/env python   import datetime,os,sys,shutil   log_path = '/alidata/log/nginx/access/' log_file = 'www.wpython.com.log'   yesterday = (datetime.datetime.now() - datetime.timedelta(days = 1))   try:    

nginx日志切割脚本,自动上传到日志服务器

nginx日志切割脚本,自动上传到日志服务器 1 nginx是yum方式安装,系统会自动生成nginx日志切割计划任务在/etc/logrotate.d/nginx下,把自动生成的计划任务删除,自己编写切割脚本,并传到统一存放日志的服务器上.  www.ahlinux.com 2 安装ncftp包,用于日志传输时使用. 3 简单切割脚本如下: #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin export PATH yesterday=`date +%

linux shell:nginx日志切割脚本

需求原因:nginx不具备日志切割功能,日志量较大,方便分析. 实现目的:完成nginx日志切割,并根据时间命名 简要命令: mv /usr/local/tengine/logs/access.log /usr/local/tengine/logs/access-date.log kill -USER1 Nginx主进程号. 解释: 通过mv命令重命名日志,并且通过kill -USER1 nginx-id的命令,告诉nginx需要写新的日志, 不然nginx不会在mv之后继续写日志. 我们可以通

简单的nginx日志切割脚本

#!/bin/bash savepath_log='/opt/apps/nginx/nglogs' nglogs='/opt/apps/nginx/logs' mkdir -p ${savepath_log}/$(date +%Y)/$(date +%m) mv $nglogs/error.log ${savepath_log}/$(date +%Y)/$(date +%m)/error.$(date +%Y%m%d).log mv $nglogs/access.log ${savepath_l

nginx日志切割脚本

# 编写切割脚本 # vim /data0/scripts/cut_nginx_log.sh #!/bin/bash logs_path="/data0/log/nginx" YDATE=`date  +"%Y"` MDATE=`date  +"%m"` DDATE=`date -d"1 day ago" +"%d"` HDATE=`date  +"%H"` mkdir -p ${log

Nginx 日志切割脚本

#!/bin/bash # Author: Wang Xiaoqiang # ReadMe: Nginx access log split script # crontab -e # 59 23 * * * sh /script/nginx_split.sh LOG_PATH='/usr/local/nginx/logs' LOG_NAME='access.log' BACKUP_DIR='/data/backup/baklog' dir_time_stamp=`date +%Y%m` file

nginx日志切割并使用flume-ng收集日志

nginx的日志文件没有rotate功能.如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件.第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志.在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件.第二步向nginx主进程发送USR1信号.nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的

Nginx日子切割脚本

#!/bin/bash #nginx日志切割脚本 [ $UID !=0 ] && { echo "Please run as root" exit 1 } logs_path="/usr/local/nginx/logs/" mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m&qu

nginx访问日志、Nginx日志切割、 静态文件不记录日志和过期时间

一:nginx访问日志 日志格式vim /usr/local/nginx/conf/nginx.conf //搜索log_format$remote_addr 客户端ip(公网ip)$http_x_forwarded_for 代理服务器的ip$time_local 服务器本地时间$host 访问主机名(域名)$request_uri 访问的url地址$status 状态码$http_referer referer$http_user_agent user_agent除了在主配置文件nginx.c