Lnmp下Nginx日志自动切割脚本

该脚本会自动切割/home/wwwlogs/目录下所有的log文件

#!/bin/bash

#自动版日志切割 无需设置

#set the path to nginx log files
log_files_path="/home/wwwlogs/"
log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
 
#set the path to nginx.
nginx_sbin="/usr/local/nginx/sbin/nginx"
#Set how long you want to save
save_days=30
 
############################################
#Please do not modify the following script #
############################################
mkdir -p $log_files_dir
 
cd $log_files_path
#cut nginx log files
for d in `ls -f *.log`;do
mv ${log_files_path}${d} ${log_files_dir}/$(date -d "yesterday" +"%Y%m%d")_$d
done
 
#delete 30 days ago nginx log files
find $log_files_path -mtime +$save_days -exec rm -rf {} \;
 
$nginx_sbin -s reload

按天分类存储并删除超过7天的日志

脚本内容:

#!/bin/bash
# a nginx access log segmentation shell script
cd /data/wslogs
log_dir="/data/wslogs"
time=`date +%Y%m%d`
nginx_dir="/usr/local/webserver/nginx"

#日志分割,按天分类
website=`ls $log_dir/access* | xargs -n 1 | cut -f 2 -d "."`
for i in $website
do
  mkdir -p $log_dir/backup/$time/$i
  mv $log_dir/access.$i.log $log_dir/backup/$time/$i/$time.log
done
$nginx_dir/sbin/nginx -s reload

#删除所有超过7天日志。
if [ "`date +%a`" = "Sun" ]; then
  all_list=`ls $log_dir/backup | xargs -n 1`
  for del in $all_list
  do
    let results=$time-$del
    if [ $results -gt 7 ]; then
      rm -fr $log_dir/backup/$del
    fi
  done
fi
需要注意的是:因为个人需要,Nginx访问日志命名格式必须是access.域名.log,例如:access.www_1987_com.log,域名中原来的点.必须换成其他字符,比如下划线_

代码中的一些位置参数可以根据自己需要修改,修改/etc/crontab文件,加入00 00 * * * root /data/logcron.sh,每天零点执行。

方法三,我们可以不用脚本可以使用简单的配置

1. 定义日志轮滚策略

# vim nginx-log-rotate

view sourceprint?
/data/weblogs/*.log {
    nocompress
    daily
    copytruncate
    create
    notifempty
    rotate 7
    olddir /data/weblogs/old_log
    missingok
    dateext
    postrotate
        /bin/kill -HUP `cat /var/run/nginx.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
[warning]/data/weblogs/*.log使用通配符时,/data/weblogs/目录下的所有匹配到的日志文件都将切割。如果要切割特定日志文件,就指定到该文件。[/warning]

2. 设置计划任务

# vim /etc/crontab

59 23 * * * root ( /usr/sbin/logrotate -f /PATH/TO/nginx-log-rotate)
这样每天23点59分钟执行日志切割。

时间: 2024-09-12 07:38:55

Lnmp下Nginx日志自动切割脚本的相关文章

Nginx日志分割切割脚本分享

先直接放日志分割切割脚本  代码如下 复制代码 #!/bin/bash #set the path to nginx log files log_files_path="/home/wwwlogs/" log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m") #set nginx log

nginx日志定时切割脚本的一些例子

每天自动nginx日志切割脚本  代码如下 复制代码 [bash] #!/bin/bash #先把日期赋值到变量,因为是在第二天0点后执行,所以日期应该获取前一天的,如20120903 todaydate=`date –date='yesterday' "+%Y%m%d"` #把网站的子目录日志枚举一下 for site in `ls -l /home/log/ | grep -v "^d" |awk '{print $NF}'` #移动昨天的日志到新的位置,重命名

Linux系统下nginx日志每天定时切割的脚本写法_nginx

使用Linux系统自带的命令logrotate对Nginx日志进行切割. Nginx安装目录:/usr/local/nginx/ Nginx日志目录:/usr/local/nginx/logs/./usr/local/nginx/logs/nginx_logs/ 1.添加nginx日志切割脚本 cd /etc/logrotate.d #进入目录 vi /etc/logrotate.d/nginx #编辑脚本 /usr/local/nginx/logs/*.log /usr/local/nginx

Linux下nginx日志每天定时切割实例

教程目的:   使用Linux系统自带的命令logrotate对Nginx日志进行切割.   Nginx安装目录:/usr/local/nginx/   Nginx日志目录:/usr/local/nginx/logs/./usr/local/nginx/logs/nginx_logs/  1.添加nginx日志切割脚本   cd  /etc/logrotate.d  #进入目录   vi   /etc/logrotate.d/nginx   #编辑脚本   /usr/local/nginx/lo

Linux下nginx日志统计的研究

是由于看组内大神@沈洲大神做的浏览器统计,一时我也想练练,于是今天一天没有出出(当然还是得吃饭的)- 思路     首先是写个自动定时任务,在每天夜里23:55的时候运行脚本,脚本做日志切割和转成需要的数据json    制作访问接口可以获取分析后的json数据,比如浏览器型号,系统型号    根据接口画出饼状图 定时任务-解析日志 写一个以每天23:55执行的shell,大概内容如下: # /bin/bash # 移动数据日志为lastcp -f /home/access.log /home/

Linux下nginx生成日志自动切割

1.编辑切割日志的 shell 程序,目录自定 #vi /data/nginx/cut_nginx_log.sh 输入代码: #!/bin/bash # This script run at 00:00 function cutAccess() { dir=$1 newdir="${dir}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")"

linux系统下Nginx 日志切割的例子

默认情况下,Nginx 的访问日志保存在一个文件里.时间久了日志内容变得异常庞大.不利于日志文件的归档备份及分析.可以通过每天定时执行脚本来达到自动切割日志的目的,达到每天的访问日志保存在一个单独文件内.   为了切割日志,首先需要将已存在的日志重命名(默认访问日志为 access.log ,重命名为当天的日期),然后向 Nginx 的 master 进程发送 USR1 信号来使进程重新打开所有日志文件并设置日志文件的属主为 work 进程运行的用户,(此时由于 access.log 已被重命名

Linux日志自动备份脚本(日志截断、压缩)

只需要将日志文件移动到备份目录下 然后将日志压缩打包,并删除日志文件 最后重建日志文件 #!/bin/bash # nginx_app=/usr/local/nginx/sbin/nginx logs_dir=/usr/local/nginx/logs bak_dir=/tmp/logbak/ date=`date +%Y%m%d` # #先将日志文件移动到备份目录 cd $logs_dir echo "moving logs" mv *.log $bak_dir sleep 3 #

linux中nginx日志分析shell脚本

以前使用虚拟主机的时候,查看网站运行日志,就发现了很多异常的恶意的访问.当时因为自己并没有系统权限没办法对这些行为进行屏蔽.现在有了自己的云主机,前端时间查看日志,又发现了很多恶意访问.正好可以通过最近对shell的学习,来做一个简单的日志分析工具,来屏蔽一些这样的操作. 首先,所谓的分析工具,肯定是建立在人为的分析的基础上的.我们来看一点我的域名运行日志:  代码如下 复制代码 78.56.78.115 - - [21/May/2014:16:54:27 +0800] "POST /wp-lo