方便查看nginx日志, 平常会将nginx日志进行每日切割处理. 这里介绍 平常比较常用的两种方式

1. logrotate

在linux上logrotate是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,它是默认随linux一起被安装的。

如果不存在的话, 可以进行手动安装

yum -y install logrotate

Logrotate是基于CRON来运行的,其脚本是/etc/cron.daily/logrotate,内容如下:

[root@huanqiu_web1 ~]# cat /etc/cron.daily/logrotate
#!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

1)日志轮询周期有这几种:

daily、weekly、monthly、yearly

默认是daily(即logrotate脚本放到了/etc/cron.daily下),具体执行时间可以查看 /etc/crontab 或者 /etc/anacrontab (CentOS)。

/etc/cron.daily/logrotate

注意点:  logrotate是基于crontab运行的, 所以这个时间点是有crontab控制的, 具体可以查询crontab的配置文件/etc/anacrontab. 系统会按照计划的频率运行logrotate,通常是每天

2)手动执行:

如果等不及cron自动执行日志轮转,想手动强制切割日志,需要加-f参数;

# /usr/sbin/logrotate -f /etc/logrotate.d/nginx

不过正式执行前最好通过Debug选项来验证一下(-d参数),这对调试也很重要

logrotate [OPTION...] <configfile>
-d, --debug :debug模式,测试配置文件是否有错误,不真实执行。
-f, --force :强制转储文件。
-m, --mail=command :压缩日志后,发送日志到指定邮箱。
-s, --state=statefile :使用指定的状态文件。
-v, --verbose :显示转储过程。

默认日志保存在: cat /var/lib/logrotate/logrotate.status  , 如果需要指定其他文件, 可以通过-s/--state参数指定

4)logrotate配置:

默认使用 /etc/logrotate.conf 文件,作为全局配置,而不同应用的具体配置则在 /etc/logrotate.d 目录下,通常以应用程序的名称命名,例如 nginx、mysql、syslog、yum 等配置。

例如:

/var/log/nginx/*.log /var/log/tomcat/*log {   # 可以指定多个路径
daily # 日志轮询周期,weekly,monthly,yearly
rotate 30 # 保存30天数据,超过的则删除
size +100M # 超过100M时分割,单位K,M,G,优先级高于daily
compress # 切割后压缩,也可以为nocompress
delaycompress # 切割时对上次的日志文件进行压缩
dateext # 日志文件切割时添加日期后缀
missingok # 如果没有日志文件也不报错
notifempty # 日志为空时不进行切换,默认为ifempty
create 640 nginx nginx # 使用该模式创建日志文件
sharedscripts # 所有的文件切割之后只执行一次下面脚本
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}

当配置完成后,可以通过如下方式进行测试。

----- 可直接手动执行
$ logrotate --force /etc/logrotate.d/nginx
----- 显示详细的信息;而且--debug/-d实际上不会操作具体文件(Dry Run)
$ logrotate --debug --verbose --force /etc/logrotate.d/nginx

常见配置参数:

daily :指定转储周期为天天
weekly :指定转储周期为每周
monthly :指定转储周期为每个月
rotate count :指定日志文件删除以前转储的次数,0指没有备份,5 指保留5 个备份
tabooext [+] list:让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave,
v, 和 ~
missingok:在日志轮循期间,任何错误将被忽略,例如“文件没法找到”之类的错误。
size size:当日志文件到达指定的大小时才转储,bytes(缺省)及KB(sizek)或MB(sizem)
compress: 经过gzip压缩转储之后的日志
nocompress: 不压缩
copytruncate:用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate: 备份日志文件可是不截断
create mode owner group : 转储文件,使用指定的文件模式建立新的日志文件
nocreate: 不创建新的日志文件
delaycompress: 和 compress 一块儿使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress: 覆盖 delaycompress选项,转储同时压缩。
errors address : 专储时的错误信息发送到指定的Email 地址 ifempty :即便是空文件也转储,这个是logrotate 的缺省选项。
notifempty :若是是空文件的话,不转储
mail address : 把转储的日志文件发送到指定的E-mail地址 nomail : 转储时不发送日志文件
olddir directory:储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 noolddir: 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript: 在转储之前须要执行的命令能够放入这个对,这两个关键字必须单独成行

2. 通过shell脚本定时执行切割

#!/bin/bash

dat=`date +"%Y%m%d" `
mon=`date +"%Y%m"`
echo $dat nginx_path="/data/log/nginx/"
mondir=$nginx_path$mon /bin/echo $mondir
if [ ! -x "$mondir" ]; then
echo "开始创建日期文件夹"
mkdir "$mondir"
echo "创建日期文件夹结束"
fi
/bin/echo `date +"%Y-%m-%d %H:%M:%S"`
/bin/echo ` ls -al $mondir` # 声明需要分割的日志文件
logs=("access_xxx.com" "nginx_access" "nginx_error")
for log_name in ${logs[@]}
do
echo $log_name
mv $nginx_path$log_name".log" $mondir/$log_name-$dat".log"
done kill -USR1 `cat /var/run/nginx.pid`
/bin/echo "done "

nginx之日志切割的更多相关文章

  1. nginx 的日志切割

    nginx的日志切割脚本 说明:在nginx的配置文件中nginx.conf并没有定义access_log的位置, 在/usr/local/nginx/conf/vhost/下的配置文件中定义了acc ...

  2. Nginx定时日志切割

    Nginx定时日志切割 现有的日志都会存在access.log文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维 人员查看,所以我们可以通过把这个大的日志文件切割为多份不 ...

  3. Nginx Java 日志切割脚本

    Nginx日志切割脚本: #!/bin/bash ########################################################################### ...

  4. nginx的日志切割

    nginx日志默认情况下统统写入到一个文件中,文件会变的越来越大,非常不方便查看分析.以日期来作为日志的切割是比较好的,通常我们是以每日来做统计的.下面来说说nginx日志切割. 如果我们使用的是yu ...

  5. Nginx log日志切割shell

    #!/bin/bash#此脚本用于自动分割Nginx的日志,包括access.log和error.log#每天00:00执行此脚本 将前一天的access.log重命名为access-xxxx-xx- ...

  6. 日志切割之Logrotate

    1.关于日志切割 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处 ...

  7. Linux日志切割logrotate服务配置

    一.logrotate介绍 logrotate软件是一个日志管理工具,用于非分隔日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间.一般centos系统已经自带安装好 ...

  8. 日志切割logrotate和定时任务crontab详解

    1.关于日志切割 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处 ...

  9. Logrotate日志切割

    日志切割Logrotate 关于日志切割 logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用. 可以节省磁盘空间 ...

  10. Nginx 访问日志轮询切割

    Nginx 访问日志轮询切割脚本 #!/bin/sh Dateformat=`date +%Y%m%d` Basedir="/application/nginx" Nginxlog ...

随机推荐

  1. 关于.NET在中国为什么工资低的分析

    引言 近年来,随着软件开发行业的蓬勃发展,越来越多的编程语言和框架进入了市场,成为了不同类型软件开发项目的首选工具.然而,在中国的开发者社区中,.NET 开发人员的工资水平相比其他技术栈,如 Java ...

  2. CSS & JS Effect – 画三角形 Triangle

    前言 画三角形有什么用? 可以做这样的 Design 参考 5 Ways To Create A Triangle With CSS Border Triangle 用 border 做 三角形应该是 ...

  3. 使用 Flutter 加速应用开发

    作者 / Larry McKenzie 本文由 eBay 技术负责人 Larry Mckenzie 和 Corey Sprague 撰写.您可以收听他们在 Google Apps, Games &am ...

  4. pytorch中LSTM各参数理解

    nn.LSTM(input_dim,hidden_dim,nums_layer,batch_first) 各参数理解: input_dim:输入的张量维度,表示自变量特征数 hidden_dim:输出 ...

  5. 在Activity中测量控件宽高的三种方式

    在进行Android开发时,有时需要测量控件的宽和高,常用的方式有以下三种: (1)重写onWindowFocusChanged(hasFocus: Boolean)方法,在这个方法内获取控件的宽高 ...

  6. 普元中间件Primeton AppServer6.5安装(Windows)

    本文在Windows环境下安装普元中间件Primeton AppServer6.5(以下简称PAS) 一.安装前准备 1.1使用软件版本 Primeton_AppServer_6.5_Enterpri ...

  7. 树莓派2 CentOS7.9 安装配置笔记

    1. 镜像下载与安装 http://isoredirect.centos.org/altarch/7/isos/armhfp/找到https://mirrors.tuna.tsinghua.edu.c ...

  8. 2021年8月国产数据库排行榜:TiDB稳榜首,达梦返前三,Kingbase进十强,各厂商加速布局云生态

    8月份的国产数据库流行度排行榜新鲜出炉.本月共有139个数据库参与了排名. 先来看看排行榜前五名.PingCAP的TiDB分数连续第二个月上涨,总分达到630.21,以136.48的分数差拉开了与第二 ...

  9. vant2 List 组件 下拉加载 onLoad

    ps:loading finished onLoad 两个变量一个函数 : async onLoad() { console.log("onload"); // 异步更新数据 // ...

  10. 封神台 SQL注入 靶场 (猫舍)手动注入

    封神台 SQL注入 靶场 (猫舍)手动注入 靶场地址 http://pu2lh35s.ia.aqlab.cn/?id=1 使用脚本 可以直接使用sqlmap脚本 直接 对这个地址进行测试 不过这样实在 ...