Linux下添加shell脚本使得nginx日志每天定时切割压缩

一 简介

对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大

这时,无论是出现异常时查日志,还是使用“GoAccess”等工具对日志进行分析都将会变得非常麻烦。因此,每天定时对nginx日志进行切割压缩就非常有必要了

二 实现

我的实现思路是每天晚上接近12点时定时执行脚本。其脚本内容就是将当前的nginx日志先按照当天日期进行重命名接着进行压缩,最后是新建空白的nginx日志文件,并重新载入nginx

[root@localhost ~]# cd /usr/local
[root@localhost local]# mkdir scripts
[root@localhost scripts]# vim nginxLog.sh
其内容如下:
#!/bin/sh
cd /usr/local/nginx/logs/
newAccessLog="access`date +%Y-%m-%d`.log"
newErrorLog="error`date +%Y-%m-%d`.log"
mv access.log $newAccessLog
mv error.log $newErrorLog
#创建日志文件
touch access.log error.log
#reload Nginx
/etc/init.d/nginx reload
#压缩日志文件
tar -zcvf $newAccessLog.tar.gz $newAccessLog --remove-files
tar -zcvf $newErrorLog.tar.gz $newErrorLog --remove-files
给脚本添加可执行权限:
[root@localhost scripts]# chmod a+x nginxLog.sh
添加定时任务(每天23:40执行):
[root@localhost scripts]# cd /var/spool/cron/
[root@localhost cron]# echo "40 23 * * * /usr/local/scripts/nginxLog.sh" > root
查看任务:
[root@localhost cron]# crontab -l
这样,第二天就可以看到效果了。最后的效果如下图所示:
wKiom1g7jvTQIhutAAAXVwvG1yI313.png
注:如果有多个nginx日志文件的话可以考虑将我上面的脚本改成更加通用的形式
附:nginx日志定时清理脚本:
[root@localhost scripts]# vim /usr/local/scripts/cleanNginxLog.sh
其内容如下:
#!/bin/sh
cd /usr/local/nginx/logs/
find . -name "*`date -d '-1months' +%Y-%m-%d`*" -type f | xargs -I {} rm -f {}
注:上面脚本的意思是删除当前天之前一个月那天的日志文件
给脚本添加可执行权限:
[root@localhost scripts]# chmod a+x /usr/local/scripts/cleanNginxLog.sh
添加一条定时任务(每天0:30执行):
[root@localhost scripts]# echo "30 0 \

shell脚本分析nginx日志: name=`awk -F ',' '{print $13":"$32}' $file | awk -F ':' '{print $4}'`ech ...
2019.11.13课堂实验之用Linux下的shell脚本完成两文本交替输出
有两个文本如下,实际中并不知道两文本各有多少行: 文本1.txt aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ccccccccccccccccccccccccccc ...
linux下利用shell脚本实现添加crontab任务
本来直接用crontab -e 就可以打开vim,输入要执行的任务保存退出就可以添加任务直接启动运行了.但是今天组长说能不能写个shell不用打开vi就能添加到crontab的. 最先想到的是怎么在s ...
linux下的shell脚本的使用
什么是shell? Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户.这种对话方式可是交互 ...
shell脚本备份nginx日志
vim /data/runlog.sh                                                  #编辑一个 shell 脚本 #!/bin/bash LOGP ...
windows下建立文件的换行符^M导致linux下的shell脚本执行错误的解决方式
常常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M.这将导致shell脚本执行错误,主要是由于dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主 ...
linux下的shell脚本(基本)
Shell 脚本的执行方式通常有如下三种: (1)bash script-name 或者 sh script-name:(2)path/script-name或者./script-name:(3)so ...
随机推荐
NetBean 8 创建EJB
一. 介绍 百度了一下关于在NetBean开发环境里创建EJB的教程,没有找到好的例子,2天的调试过程,写下来帮助后人. EJB (Enterprise Java Bean) 是一套高扩展性的开发企业 ...
ecshop 获取某个商品的 所有订单信息 或者销量
把一下代码放到 lib_main.php 1.统计某个下单商品的人数 function get_goods_ordernum($goods_id){ $sql = "select count ...
spark 编译
java中的trim()
trim():去掉字符串首尾的空格.但该方法并不仅仅是去除空格,它能够去除从编码'\u0000′ 至 '\u0020′ 的所有字符. 回车换行也在这20个字符 例1: public static vo ...
hdu4992 Primitive Roots(所有原根)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4992 题意:给出n,输出n的所有原根. 思路:求出n的一个原根x,那么对于所以的i,i
[转载] C++位运算:将一个4字节整数的二进制表示中的001替换为011
#include #include /** * Key: * * get someone bit: num & (mode1 ...
Android TabHost中Activity之间传递数据
例子1: TabHost tabhost = (TabHost) findViewById(android.R.id.tabhost); tabhost.setup(this.getLocalActi ...
IP地址字符串与BigInteger的转换
/**  * Copyright (c) 2010, 新浪网支付中心  *      All rights reserved.  *  * Java IP地址字符串与BigInteger的转换,  * ...
5分钟搞定iOS抓包Charles,让数据一清二楚
Charles安装 HTTP抓包 HTTPS抓包   1. Charles安装 官网下载安装Charles:https://www.charlesproxy.com/download/ 2. HTTP ...
redis使用场景和java测试案例
redis数据结构和使用场景 strings lists sets sort sets hashes strings token session validateCode 分布锁 lists 最近联系 ...