日志文件删除shell脚本
大日志文件切割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脚本的更多相关文章
- 清除tomcat日志文件的shell脚本
#! /bin/bash d=`date +%F` exec >> /mydata/script/logs/$d>& echo "开始执行清除tomcat日志文件& ...
- 【Shell实战】定期清理日志文件的shell脚本
功能描述:清理/var/log/路径下的messages历史日志文件(messages-date),但不清理messages文件本身 依赖要求:服务器上安装了bc模块 # clean_logs.sh ...
- 运行系统命令而且将输出写到指定日志文件的shell脚本(2)
上一篇是个简单的能够运行而且写入日志的脚本,可是假设放到生产环境上就显得太粗糙了,所以须要进一步的优化: #! /bin/bash if [ -d "/opt/bmc" ] ; t ...
- Linux定时对日志批量打包Shell脚本及定时任务crontab 详细用法
一.需求背景 因此次项目的生产环境中部署了多套系统,每天会产生大量的日志(数百GB的量),侵占了服务器宝贵的存储资源空间.为了有效缓解服务器存储压力,考虑通过Linux的Shell脚本结合cr ...
- FTP定时批量下载文件(SHELL脚本及使用方法 )
1. 脚本实例 将以下脚本保存为 getftp.sh #!/bin/bash datesign=`date -d -95day +%Y%m%d` ftp -nv 12.2.2.28 << ...
- FTP定时批量下载文件(SHELL脚本及使用方法 ) (转)--good
#/bin/bash URL="http://192.168.5.100/xxx.php" check() { RESULT=$(curl -s $URL) echo $RESUL ...
- 日志备份的shell脚本
以前工作中写的日志备份的脚本,现记录一下日志备份脚本代码,以后工作中遇到遇到需要备份或者清理日志的时候可以拿来简单修改一下使用,减少工作量. 把备份脚本添加到Linux定时任务中,可以定时执行. 日志 ...
- Centos下Nginx配置WEB访问日志并结合shell脚本定时切割
在一个成熟的WEB系统里,没有日志管理是不可以的,有了日志,可以帮助你得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息:通过错误日志,你可以得到系统某个服务或server的性能瓶颈等. ...
- 本地文件与服务器文件同步shell脚本
为何创建此脚本是因为方便项目的布署,不需要手动地去同步不同的项目,而只需要简单的执行shell脚本,输入项目名就能发布到服器上. 1.shell文件代码 #!/bin/sh read -t 30 -p ...
随机推荐
- js types & primitive & object
js types & primitive & object js 数据类型 typeof null // "object" typeof undefined // ...
- 新手如何通过SPC算力生态获得多重收益?
DeFi市场在去年的一波又一波热潮之后,在今年余温有些褪去.而资本市场也将目光从DeFi市场中转移开来,他们将目光对准了新的市场,即算力市场.算力,其实从区块链技术在大范围普及以来,就是一个常见的话题 ...
- 如何在ASP.NET Core中编写高效的控制器
通过遵循最佳实践,可以编写更好的控制器.所谓的"瘦"控制器(指代码更少.职责更少的控制器)更容易阅读和维护.而且,一旦你的控制器很瘦,可能就不需要对它们进行太多测试了.相反,你可 ...
- 关于Python 编码的一点认识
在计算机中,所有数据的存储.运算以及传输都必须是二进制数字,因为计算机只认识0和1. 当一个人把一份数据传给另一个人时,计算机传递的是其实是二进制数字,但这些数字需要被还原为原始信息. 这个工作当然是 ...
- Java volatile 关键字底层实现原理解析
本文转载自Java volatile 关键字底层实现原理解析 导语 在Java多线程并发编程中,volatile关键词扮演着重要角色,它是轻量级的synchronized,在多处理器开发中保证了共享变 ...
- Docker搭建Hadoop环境
文章目录 Docker搭建Hadoop环境 Docker的安装与使用 拉取镜像 克隆配置脚本 创建网桥 执行脚本 Docker命令补充 更换镜像源 安装vim 启动Hadoop 测试Word Coun ...
- Java 集合框架 03
集合框架·HashSet 和 TreeSet HashSet存储字符串并遍历 * A:Set集合概述及特点 * 通过API查看即可 * 无索引,不可以重复,无序 * B:案例演示 * HashSet存 ...
- 初探JavaScript原型链污染
18年p师傅在知识星球出了一些代码审计题目,其中就有一道难度为hard的js题目(Thejs)为原型链污染攻击,而当时我因为太忙了(其实是太菜了,流下了没技术的泪水)并没有认真看过,后续在p师傅写出w ...
- mysql查询较长的执行进程及创建权限账号
A:对于死锁,进程的操作 1.查找当前活跃事务 SELECT * from information_schema.INNODB_TRX 根据trx_started等判断事务是否异常锁定 2.杀死线程 ...
- 七种方案!探讨Redis分布式锁的正确使用姿势
前言 日常开发中,秒杀下单.抢红包等等业务场景,都需要用到分布式锁.而Redis非常适合作为分布式锁使用.本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式.如果有不正确的地方,欢迎大家 ...