一个典型的日志切割脚本,废话不多说,直接上代码(大神勿骂emmmm)
#/bin/bash
#日志切割
#项目日志目录
file1=项目日志目录(绝对路径)
#日志备份目录
file=日志备份目录(绝对路径)
rootfile=/root/.pm2/
date=
`date +%Y%m%d%H%M`
date1=
`date +%Y%m%d --date '7days ago'`
cd
$file
mkdir
"
$date
"log
file2=
"
$file$date
"log/
cd
$file1
for
i
in
`ls`
do
if [ -f
"
$i
" ];
then
mv
$i
$file2$i
touch
$i
fi
done
pm2 reloadLogs
#打包七天前的文件
cd
$file
for
a
in
`ls
$file
|
grep
$date1
`
do
if [ -d
$a ];
then
cd
$a
#打包当前目录并删除原目录下文件
/bin/tar -czf
"
$file$a
".log.gz *.log --remove-files
#删除原文件夹
/bin/rm -rf
$file$a
fi
done
#删除三十天前的日志
cd
$file
/bin/find
$file -mtime +30 -name
"*log*" -exec rm -rf {}
\;
#另外每晚备份主目录下.pm2/*.log
cd
$rootfile
for
log
in
`ls |
grep .log$`
do
if [ -f
"
$log
" ];
then
mv
"
$log
"
"
$log
.bak"
touch
"
$log
"
fi
done
#分别打包.bak文件并删除源文件,然后移动到$file2/root目录下
mkdir
"
$file2
"root
for
bak
in
`ls |
grep .bak$`
do
if [ -f
"
$bak
" ];
then
/bin/tar -czf
"
$bak
".tar.gz
$bak --remove-files
mv
$bak.tar.gz
"
$file2
"root/
fi
done
#备份主目录下.pm2/log目录下文件
cd
"
$rootfile
"logs
for
i
in
`ls`
do
if [ -f
"
$i
" ];
then
mv
$i
"
$file2
"root/
touch
$i
fi
done
#刷新pm2
pm2 reloadLogs
file1 为日志目录 file2 为日志需要暂存的目录,这个脚本具体为:日志切割,保存七天,七天后的压缩保存到三十天,然后删除