我正在使用freeradius
设备daloradius
。
现在有很多路由器连接到这个radius服务器,数据库和日志文件也在增长太多。
freeradius
的日志文件保存在:
/radacct/xxx.xxx.xxx.xxx/detail-20150404
xxx.xxx.xxx.xxx
是不同的IP客户端,因此这些文件夹中有很多文件夹和大量文件。
我可以添加此目录以旋转日志,因为文件详细信息-TODAY在白天无法修改,并且可以在24小时内访问。
所以我要求:
将/radacct/xxx.xxx.xxx.xxx/detail-yyyymmdd
移至新文件夹/radacct_old/xxx.xxx.xxx.xxx/detail-yyyymmdd
的脚本。
我们必须移动所有除之外的文件,其中yyyymmdd
是当前日期(执行脚本的日期)。
在此之后,我可以轮换日志radacct_old
或只添加到zip radacct_old_yyyymmdd
。
我打算每周左右做这个工作。
您建议的最佳方式是什么?
答案 0 :(得分:2)
尝试这样的事情:
function move {
today=$(date +%Y%m%d)
file="${1#/radacct/}"
ip="${file%%/*}"
name="${file##*/}"
if [[ ! $name =~ detail-$today ]]; then
dir="/radacct_old/$ip"
[ -d "${dir}" ] || mkdir "${dir}"
mv "${1}" "${dir}/${name}"
fi
}
export -f move
find /radacct -type d -mindepth 2 -maxdepth 2 -name '*detail*' -exec bash -c 'move "$0"' {} \;
注意这是未经测试的,你一定能填补空白。我会测试它并稍后进行调试,如果你似乎无法使它工作。如果您有其他问题,请发布。
说明:通常脚本会查找所需格式的所有目录,并通过调用函数(开始)移动它们(最后两行)。
移动功能
today=$(date +%Y%m%d)
以所需格式构建日期。file="${1#/radacct/}"
从我们使用find
找到的目录中删除前导目录名称。ip="${file%%/*}"
提取IP地址。name="${file##*/}"
提取目录名称。if [[ ! $name =~ detail-$today ]]; then
如果目录名称来自今天。dir="/radacct_old/$ip"
构建目标目录。[ -d "${dir}" ] || mkdir "${dir}"
如果它不存在则创建它。mv "${1}" "${dir}/${name}"
将目录移至新位置。export -f move
导出函数,以便在子shell中调用查找功能
find /radacct
查看/radacct
dir -type d -mindepth 2 -maxdepth 2
在dirs中寻找dirs。 -name '*detail*'
,其中包含单词detail。-exec bash -c 'move "$0"' {} \;
并执行move函数,提供dir的名称作为参数。请注意,我会在今天晚些时候添加更多细节并进行测试。
要每周执行此操作,请使用cron作业。