线上服务器 , 简单的清除日志脚本
新应用采用了新的日志目录 , 运维还不支持 , 所以只能自己手动加脚本了.
日志格式: 不同目录不同的日志文件 .
app/
下是应用日志 , sql/
下是数据库日志 , exp/
下是异常日志 .
每个目录下的日志文件名格式为: xxx.log.yyyy-MM-dd
则脚本如下 cleanlog.sh
:
清日志脚本
#!/bin/sh
#日志目录
LOG_DIR=/path/to/logs
#不需要清除日志的目录 , 在目录下加这个文件就可以了
NO_CLEAN=.noclean
#不需要压缩日志的目录 , 在目录下加这个文件就可以了
NO_TAR=.notar
#日志保存的天数
RESERVE_DAYS=10
#取指定天数前的日期
DAY=`date -d -$RESERVE_DAYS"days" +%Y-%m-%d`
#遍历所有的目录及子目录的日志,先删除旧的日志文件
for dir in `ls $LOG_DIR`;do
if [ -f $LOG_DIR/$dir/$NO_CLEAN ];then
echo $NO_CLEAN" exist in "$LOG_DIR/$dir
else
# 删除过期日志
rm -rf $LOG_DIR/$dir/*$DAY*
echo "Old files removed from "$LOG_DIR/$dir
fi
done
# 取昨天的日期
YESTERDAY=`date -d -1days +%Y-%m-%d`
# 遍历所有的目录及子目录, 压缩日志文件
for dir in `ls $LOG_DIR`;do
if [ -f $LOG_DIR/$dir/$NO_TAR ];then
# 不需要压缩的跳过
echo $NO_TAR" exist in "$LOG_DIR/$dir
else
#进入到子目录
cd $LOG_DIR/$dir
for file in `ls | grep $YESTERDAY"$"`;do
# 压缩日志文件
tar czf "$file".tar.gz $file
# 删除原日志文件
rm -rf $file
echo $file" zipped in "$LOG_DIR/$dir
done
fi
done
crontab 命令
加 crontab 执行脚本, 创建文件 cron.cron
(个人建议使用文件的方式创建cron , 可以适当做些注释说明) , 添加如内容:
# 清除日志脚本
30 2 * * * sh /path/to/scripts/cleanlog.sh
执行
最后执行crontab
crontab cron.cron
如果文章有帮助到您,请点个赞,您的反馈会让我感到文章是有价值的