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

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

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

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

二 实现

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

[[email protected] ~]# cd /usr/local
[[email protected] local]# mkdir scripts
[[email protected] 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
给脚本添加可执行权限:

[[email protected] scripts]# chmod a+x nginxLog.sh
添加定时任务(每天23:40执行):

[[email protected] scripts]# cd /var/spool/cron/
[[email protected] cron]# echo "40 23 * * * /usr/local/scripts/nginxLog.sh" > root
查看任务:

[[email protected] cron]# crontab -l
这样,第二天就可以看到效果了。最后的效果如下图所示:
wKiom1g7jvTQIhutAAAXVwvG1yI313.png
注:如果有多个nginx日志文件的话可以考虑将我上面的脚本改成更加通用的形式
附:nginx日志定时清理脚本:

[[email protected] 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 {}
注:上面脚本的意思是删除当前天之前一个月那天的日志文件

给脚本添加可执行权限:

[[email protected] scripts]# chmod a+x /usr/local/scripts/cleanNginxLog.sh
添加一条定时任务(每天0:30执行):
[[email protected] scripts]# echo "30 0 * * * /usr/local/scripts/cleanNginxLog" >> /var/spool/cron/root

以上部分来自网络博客,本人做了一些总结

时间: 2024-10-10 15:07:34

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

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句 一:实验环境 1):虚拟机 2):linux系统 二:实验目标 1): shell 基本语法 2):变量 3):表达式 4):判断语句 5): if表达式 三:实验脚本 第一块 一个简单的shell脚本程序 [[email protected] ~]# mkdir test [[email protected] test]# vim example1.sh #!/bin/bash #This is to show wha

2019.11.13课堂实验之用Linux下的shell脚本完成两文本交替输出

有两个文本如下,实际中并不知道两文本各有多少行: 文本1.txt aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ccccccccccccccccccccccccccccccccccccccc eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee ggggggggggggggggggggggggggggggggggggggg wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww zzzzzzzzzzzzzzzzz

Linux系统中nginx日志每天定时切割实现方法详解

本文和大家分享的是使用Linux中自带的命令logrotate对Nginx日志进行切割相关实现方法,希望帮助大家更好的学习linux系统. 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/

linux下使用shell脚本自动化部署项目

在Java开发项目时经常要把正在开发的项目发布到测试服务器中去测试,一般的话是要把项目先打成war包,然后把war包发布到服务器中,关闭服务器, 最后重新启动服务器,虽然这过程不是很繁琐,但如果是多个工程都要发布的时候,发布的过程就会比较繁琐,所以福音来了-- 通过 编写shell 脚本来完成这些操作,只要执行一个shell脚本,项目就可以自动发布到服务器了,用起来还是比较方便的. 第一步:在linux中安装svn.(这个可以参照另外一篇博客:http://simplelife.blog.51c

windows下建立文件的换行符^M导致linux下的shell脚本运行错误的解决方案

经常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M,这将导致shell脚本运行错误,主要是因为dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主要解决如下: (1)在VI编辑器中将^M删除: 将VI编辑器切换到命令模式下,输入 :%s/^M//g (注意^M 不是shift ^ +M 而是ctrl+v 加上ctrl+m)  s///g是shell的替换命令 此命令必须是手动打上,不可复制. (2)dos2unix 命令 dos2unix f

shell脚本分析nginx日志

第一版,比较粗糙,仅限于能用 正在写入的文件不能用tar进行压缩 --------压缩日志---------------------- 94 access.log 95 tar: access.log: file changed as we read it 96 #### 压缩日志失败 #### #!/bin/sh #分析nginx日志 DATE=`date '+%Y%m%d-%H%M'` ARCHIVE=/usr/log_bak/nginx_$DATE.tar.gz MESSAGE=/usr/

shell 脚本分析Nginx 日志

本脚本分析Nginx 负载均衡器的日志: #!/bin/bash if [ $# -eq 0 ]; then     echo "Error:please specify logfile."     exit 0 else     LOG=$1 fi if [ ! -f $1 ]; then     echo "Sorry,sir. I cat't find this apache log file, pls try again!"     exit 0 fi ##

Linux下使用shell脚本远程登录主机(Ubuntu & CentOS)

1.准备工作:安装expect for Ubuntu sudo apt-get install expect for Centos yum install expect 2.完整脚本 #!/usr/bin/expect spawn /usr/bin/ssh [email protected] -p 22 expect "password:" send "remoteComputerPassword\r" expect efo interact 注意事项: 如果脚本无

linux下用shell脚本删除mysql记录ssc源码搭建

mysql下删除记录较多的ssc源码搭建会出现如下错误:企 娥:217 1793 408 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 因此需要分批删除表中数据,脚本如下: #!/bin/bashDB_USER="root"DB_PASS="pw"DB_HOS