nginx日志切割

简介:

shell脚本实现nginx日志切割

1、编写自动分割Nginx日志脚本

#!/bin/bash  
#Rotate the Nginx logs to prevent a single logfile from consuming too much disk space.   
#Nginx 日志文件所在的目录
LOGS_PATH=/opt/nginx/logs/nginx
#获取昨天的yyyy-MM-dd(2017-11-14)
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
或获取昨天的yyyyMMdd(20171114)
YESTERDAY=$(date -d "yesterday" +%Y%m%d)
#保留30天日志
save_days=30
#移动文件 
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log  
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log  
#向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件  
kill -USR1 $(cat /opt/nginx/run/nginx/nginx.pid)  
#delete 30 days ago nginx log files
find $LOGS_PATH -mtime +$save_days -exec rm -f {} \;

给脚本加上执行权限
chmod +x /opt/nginx/cut-nginxlog.sh

2、设置Linux定时任务

vi  /etc/crontab

使用bash 或sh、root来执行bash shell脚本:

0 0 * * * /bin/sh /opt/nginx/cut-nginxlog.sh > /dev/null 2>&1
0 0 * * * bash /opt/nginx/cut-nginxlog.sh
0 0 * * * root /opt/nginx/cut-nginxlog.sh;

说明:
从command>/dev/null说起
其实这条命令是一个缩写版,对于一个重定向命令,肯定是a > b这种形式,那么command > /dev/null难道是command充当a的角色,/dev/null充当b的角色。这样看起来比较合理,其实一条命令肯定是充当不了a,肯定是command执行产生的输出来充当a,其实就是标准输出stdout。所以command > /dev/null相当于执行了command 1 > /dev/null。执行command产生了标准输出stdout(用1表示),重定向到/dev/null的设备文件中。

2>&1
几个基本符号及其含义
/dev/null 表示空设备文件
0 表示stdin标准输入
1 表示stdout标准输出
2 表示stderr标准错误

有时候希望将错误的信息重新定向到输出,就是将2的结果重定向至1中就有了"2>1"这样的思路,如果按照上面的写法,系统会默认将错误的信息(STDERR)2重定向到一个名字为1的文件中,而非所想的(STDOUT)中。因此需要加&进行区分。就有了 2>&1 这样的用法,这里&相当于等效于标准输出

3、shell定时删除nginx日志

创建dellog.sh文件,路径/opt/nginx
vi dellog.sh
#!/bin/sh
find /opt/nginx/logs/nginx/error -mtime +7 -type f -name *.log | xargs rm -f
find /opt/nginx/logs/nginx/access -mtime +7 -type f -name *.log | xargs rm -f
#定期删除七天前的日志文件

有时为了验证脚本执行内容可以打印到test.log查看是否正确的:
0 0 * /opt/nginx/cut-nginxlog.sh > /var/tmp/test.log 2>&1


      本文转自ling118 51CTO博客,原文链接:http://blog.51cto.com/meiling/2044792,如需转载请自行联系原作者



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
存储 JSON 应用服务中间件
Higress的日志收集中,底层用的是Envoy,可不可以实现类似NGINX的rsyslog发送?
【2月更文挑战第30天】Higress的日志收集中,底层用的是Envoy,可不可以实现类似NGINX的rsyslog发送?
19 2
|
3月前
|
Java 应用服务中间件 nginx
微服务框架(二十九)Logstash Nginx 日志上报
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Logstash Nginx 日志上报 本系列文章中所使用的框架版本为Spring Boot 2.0.3...
|
14天前
|
网络协议 应用服务中间件 Linux
centos7 Nginx Log日志统计分析 常用命令
centos7 Nginx Log日志统计分析 常用命令
27 2
|
15天前
|
运维 监控 应用服务中间件
LNMP详解(十四)——Nginx日志详解
LNMP详解(十四)——Nginx日志详解
16 2
|
22天前
|
存储 监控 数据可视化
Nginx+Promtail+Loki+Grafana Nginx日志展示
通过这些步骤,你可以将Nginx的日志收集、存储、查询和可视化整合在一起。这样,你就可以在Grafana中轻松地创建和展示Nginx日志的图表和面板。
30 3
|
1月前
|
域名解析 网络协议 应用服务中间件
nginx-ingress通过ipv6暴露服务,并在nginx ingress日志中记录客户端真实ipv6的ip地址
本文主要通过阿里云提供的clb和nlb来实现,建议是提前创建好双栈的vpc和vsw(使用clb可以不用双栈vpc和vsw)
181 1
|
3月前
|
负载均衡 应用服务中间件 nginx
【实践】使用Nginx作为GrayLog日志接入的负载均衡
【实践】使用Nginx作为GrayLog日志接入的负载均衡
46 0
|
3月前
|
监控 安全 前端开发
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
33 0
|
3月前
|
消息中间件 JSON 负载均衡
ELK7.x日志系统搭建 2. Nginx、Cluster等日志收集
ELK7.x日志系统搭建 2. Nginx、Cluster等日志收集
111 0
|
3月前
|
存储 监控 Ubuntu
日志切割工具-Logrotate实现nginx日志切割
日志切割工具-Logrotate实现nginx日志切割
37 0