大日志文件切割shell脚本

#!/bin/bash
# ---------------------------------------------------------------------
# 日志文件300M分割,并zip压缩,每个项目仅保留最新30个文件,
# 文件格式:项目名称-年月日时分秒.zip
# Author :
# Date :
# Email :
# Version : 1.0
# --------------------------------------------------------------------- # 日志目录
LOG_DIR='/log'
# 日志文件名称,支持正则表达式,多个使用“,”分隔
FILE_NAME='*.log'
# 文件切割最大大小,单位MB
MAX_FILE_SIZE=300
# 保留文件数
MAX_FILE_NUM=30
# 压缩包后缀
FILE_SUFFIX=zip
# 提示内容
MESSAGE="Usage: $0 LOG_DIR FILE_NAME MAX_FILE_SIZE MAX_FILE_NUM \nFor Example: $0 /log/ nginx.log 100 30" while [ $# -ge 2 ]
do
case "$1" in
-d) LOG_DIR=$2; shift 2;;
-f) FILE_NAME=$2; shift 2;;
-s) MAX_FILE_SIZE=$2; shift 2;;
-n) MAX_FILE_NUM=$2; shift 2;;
-t) FILE_SUFFIX=$2; shift 2;;
*) echo "Unknown parameter $1." ; shift 2; continue;;
esac
done if [ -z "${LOG_DIR}" -o ! -d "${LOG_DIR}" ]; then
echo "请输入文件所在目录"
echo -e ${MESSAGE}
exit 1
fi LOG_FILE_SIZE=$(ls ${LOG_DIR}'/'${FILE_NAME} | wc -l)
if [ "${LOG_FILE_SIZE}" -eq 0 ]; then
echo "请输入文件名"
echo -e ${MESSAGE}
exit 1
fi if [ -z "${MAX_FILE_SIZE}" ]; then
echo "请输入文件以多少MB分割"
echo -e ${MESSAGE}
exit 1
fi if [ -z "${MAX_FILE_NUM}" ]; then
echo "请输入保留多少个压缩文件"
echo -e ${MESSAGE}
exit 1
fi # -------------------------------------------------
# rolling log file
rolling_file () {
CUR_TIME=$(date +%Y%m%d%H%M%S)
LOG_FILE_LIST=($(ls ${LOG_DIR}/${FILE_NAME}))
cd ${LOG_DIR} for LOG_FILE in ${LOG_FILE_LIST[@]}
do
BACK_FILE_NAME="${LOG_FILE}-${CUR_TIME}" # check file data size
LOG_FILE_SIZE=$(stat -c %s ${LOG_FILE})
if [ ${LOG_FILE_SIZE} -gt $((MAX_FILE_SIZE * 1024 * 1024)) ]; then
cp -f ${LOG_FILE} ${BACK_FILE_NAME}
echo "" > ${LOG_FILE}
zip -9q ${BACK_FILE_NAME}.zip ${BACK_FILE_NAME}
rm -f ${BACK_FILE_NAME}
echo -e "Backup success. file: ${BACK_FILE_NAME}.zip"
fi
done
} # -------------------------------------------------
# delete expire archive files
delete_expire_bak_file () {
LOG_FILE_LIST=($(ls ${LOG_DIR}/${FILE_NAME}))
for LOG_FILE in ${LOG_FILE_LIST[@]}
do
FILE_NAME=$(basename ${LOG_FILE})
CUR_FILE_NUM=$(ls ${LOG_DIR}/${FILE_NAME}*.${FILE_SUFFIX} | wc -l) if [ ${CUR_FILE_NUM} -gt ${MAX_FILE_NUM} ]; then
DEL_FILE_NUM=$((${CUR_FILE_NUM} - ${MAX_FILE_NUM}))
DEL_FILE_NAME=$(
stat -c %Y,%n ${FILE_NAME}*.${FILE_SUFFIX} | sort -k 1 -t, -n | \
head -n ${DEL_FILE_NUM} | awk -F "," '{print $2}'
)
echo "Delete backup file ${DEL_FILE_NUM} file: \n${DEL_FILE_NAME}"
rm -f ${DEL_FILE_NAME}
fi
done
} rolling_file
delete_expire_bak_file

小日志文件删除shell脚本

#!/bin/bash

# ------------------------------------------------------------------------------
# 功能:清理新版客服系统go工程运行日志,保留最近3天
# 用法:sh 此脚本 im-customer|im-company|im-static|im-chat-client|im-dbs|im-auto-order-sentinel|consul
# 作者:
# 创建日期:
# ------------------------------------------------------------------------------ # 工程代码
project_code=(${*}) # 保留天数
keep_time='+3' cs_log_rolling () {
for i in ${!project_code[@]}
do
if [ "${project_code[${i}]}" != "consul" ]; then cs_log_dir=/data/www/cs/${project_code[${i}]}/logs find ${cs_log_dir}/ -mtime ${keep_time} -name "${project_code[${i}]}-*.log.gz" -exec rm -f {} \; > /dev/null 2>&1 echo "${project_code[${i}]} log cleanup succeeded !" sleep 1
fi
done
} consul_log_rolling () {
if [[ "${project_code[@]}" =~ consul ]]; then consul_log_dir=/data/log/consul-log find ${consul_log_dir}/ -mtime ${keep_time} -name "consul-*.log" -exec rm -f {} \; > /dev/null 2>&1 echo "consul log cleanup succeeded !"
fi
} cs_log_rolling
consul_log_rolling

日志文件删除shell脚本的更多相关文章

  1. 清除tomcat日志文件的shell脚本

    #! /bin/bash d=`date +%F` exec >> /mydata/script/logs/$d>& echo "开始执行清除tomcat日志文件& ...

  2. 【Shell实战】定期清理日志文件的shell脚本

    功能描述:清理/var/log/路径下的messages历史日志文件(messages-date),但不清理messages文件本身 依赖要求:服务器上安装了bc模块 # clean_logs.sh ...

  3. 运行系统命令而且将输出写到指定日志文件的shell脚本(2)

    上一篇是个简单的能够运行而且写入日志的脚本,可是假设放到生产环境上就显得太粗糙了,所以须要进一步的优化: #! /bin/bash if [ -d "/opt/bmc" ] ; t ...

  4. Linux定时对日志批量打包Shell脚本及定时任务crontab 详细用法

    一.需求背景     因此次项目的生产环境中部署了多套系统,每天会产生大量的日志(数百GB的量),侵占了服务器宝贵的存储资源空间.为了有效缓解服务器存储压力,考虑通过Linux的Shell脚本结合cr ...

  5. FTP定时批量下载文件(SHELL脚本及使用方法 )

    1. 脚本实例 将以下脚本保存为 getftp.sh #!/bin/bash  datesign=`date -d -95day +%Y%m%d` ftp -nv 12.2.2.28 << ...

  6. FTP定时批量下载文件(SHELL脚本及使用方法 ) (转)--good

    #/bin/bash URL="http://192.168.5.100/xxx.php" check() { RESULT=$(curl -s $URL) echo $RESUL ...

  7. 日志备份的shell脚本

    以前工作中写的日志备份的脚本,现记录一下日志备份脚本代码,以后工作中遇到遇到需要备份或者清理日志的时候可以拿来简单修改一下使用,减少工作量. 把备份脚本添加到Linux定时任务中,可以定时执行. 日志 ...

  8. Centos下Nginx配置WEB访问日志并结合shell脚本定时切割

    在一个成熟的WEB系统里,没有日志管理是不可以的,有了日志,可以帮助你得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息:通过错误日志,你可以得到系统某个服务或server的性能瓶颈等. ...

  9. 本地文件与服务器文件同步shell脚本

    为何创建此脚本是因为方便项目的布署,不需要手动地去同步不同的项目,而只需要简单的执行shell脚本,输入项目名就能发布到服器上. 1.shell文件代码 #!/bin/sh read -t 30 -p ...

随机推荐

  1. .bashrc & rename hostname & rename username

    .bashrc & rename hostname & rename username mbp $ pwd $ cd ~ $ pwd $ cat .bashrc $ vim .bash ...

  2. npm & cli & node.js

    npm & cli & node.js https://www.npmjs.com/ https://www.npmjs.com/settings/xgqfrms/packages h ...

  3. how to write a node cli tool

    how to write a node cli tool https://www.google.com/search?q=how+to+node+cli+tool&oq=how+to+node ...

  4. script async / defer

    script async / defer preload / prefetch https://abc.xgqfrms.xyz/ https://javascript.info/script-asyn ...

  5. ⑧SpringCloud 实战:引入 Actuator监控+整合监控页面

    Actuator是什么? Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用.这个模块是 ...

  6. JavaScript 中的执行上下文和执行栈

    JavaScript - 原理系列 ​ 在日常开发中,每当我们接手一个现有项目后,我们总喜欢先去看看别人写的代码.每当我们看到别人写出很酷的代码的时候,我们总会感慨!写出这么优美而又简洁的代码的兄弟到 ...

  7. 20201228 买卖股票的最佳时机 IV(困难)

    给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意:你不能同时参 ...

  8. 微信小程序:给data中对象中的属性设置值与给data中的属性或对象或数组设置值的区别

    一.给data中的属性或对象或数组设置值,属性名不需要加引号 this.setData({ material: param, // 这里material为对象 } this.setData({   d ...

  9. SpringCloud(一):微服务架构概述

    1-1.  系统进化理论概述 在系统架构与设计的实践中,经历了两个阶段,一个阶段是早些年常见的集中式系统,一个阶段是近年来流行的分布式系统: 集中式系统: 集中式系统也叫单体应用,就是把所有的程序.功 ...

  10. Flask:数据库管理

    为什么不使用SQL语句,而使用ORM框架管理数据库?首先,在python程序中嵌入原生SQL语句,不方便维护,ORM框架使用面向对象思想,使用较方便:第二,如果更换底层数据库引擎,ORM框架不需要修改 ...