如何定期另存日志并删除?

Bash

1 前言

一个问题,一篇文章,一出故事。
笔者生产环境有几台WebMail的服务器,定期产生大量的日志占用空间,笔者决定使用脚本根据大小定期另存为并删除旧的日志,于是整理此文。
关于WebMail环境,你可以参阅如下链接,

如何部署WebMail Roundcube官方移动版?

2 最佳实践

2.1 创建管理脚本

vim ~/scripts/logtool-webmail.sh

加入如下配置,

#!/bin/bash

logDir="/var/www/roundcubemail"*"/logs/"
fileSize="+10M"
removeTime="+14"

for i in `find $logDir -name *.log -size $fileSize`; do
        saveFile="$i."`date +"%Y%m%d%H%M%S"`
        fileEnd=`wc -l < $i`
        head -n $fileEnd $i > "$saveFile"
        if [ $? == 0 ]; then
                sed -i -e "1,${fileEnd}d" $i
        fi
        gzip "$saveFile"
done

#find $logDir -name *.log.*.gz -mtime "$removeTime" -exec ls -lh {} \;
find $logDir -name *.log.*.gz -mtime "$removeTime" -exec rm -f {} \;

以上主要参数定义如下,
– 参数“logDir”定义日志的目录
– 参数“fileSize”定义当日志多大时进行日志切割,范例“+10M”表示大于10M符合条件
– 参数“removeTime”定义另存的日志保留多久后删除,范例“+14”表示大于14天符合条件

2.2 创建脚本触发

crontab -e

加入如下配置,

*/5 * * * * sh ~/scripts/logtool-webmail.sh
没有评论

发表回复

Bash
如何熟悉Base Shell的变量的间接引用?

1 前言 一个问题,一篇文章,一出故事。 笔者希望以一个变量名称去引用另一个变量,于是整理此文。 2 …

Bash
如何实现文件夹路径转纯数字符串?

1 前言 一个问题,一篇文章,一出故事。 由于由于需要设置某目录的配额,配额要求为每个目录指定一个项 …

Bash
如何统计Linux打开文件前10进程?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境有台服务最近压力比较大,打开的文件数量不断地往 …