一个测试机上部署多个应用,总是经常出现磁盘空间已满,不能部署应用的情况,所以写了个小脚本,用于定时清理日志,避免出现这种情况。
1、如果是清理固定路径下的文件,可以直接用命令方式。
命令方式
(1)编写命令:
find /*/logs -name 'catalina.out*.log' -and -mtime +7
测试方法:把路径中的*变为具体的路径,在linux命令窗口中执行,调试结果(-mtime +7为删除最后修改时间在7天以前的文件,可自己配置)
(2)在linux上配置定时任务:
说明:因为我们使用的是系统的crontab文件,系统的crontab文件路径为:/etc/crontab
编辑crontab文件:
命令:vi /etc/crontab
输入I;进入编辑模式
在文件末尾写入步骤一的命令
配置任务定时时间:
crontab定时配置说明:
*(分) *(时) *(天) *(月) *(星期)
crontab中最终写入的命令为: 23 59 * * * root find /*/logs -name 'catalina.out*.log' -and -mtime +7 -type f |xargs rm(每天23:59分开始执行此命令
(3)检验定时任务是否执行:
命令: tail /var/spool/mail/root
(4)若定时任务没有执行,输入命令 service crond status,确保crond状态为 is running
2、但是有时候需要同时清理多个路径下的指定文件,这时,我们最好就写个shell脚本了,下面是shell脚本的实现方式
shell脚本方式:
(1)vi /*/deletelog.sh(脚本路径可变,保证在path变量中就可以)
脚本:
#!/bin/bash
workdir=("/export/Domains" "/home/admin")#可填写多个路径
for wdir in ${workdir[@]}
do
echo filepath is $wdir
if [ $wdir = ${workdir[0]} ] ;then
fileStr=`find $wdir/*/logs -type d`
echo files is $fileStr
else
fileStr=`find $wdir -type d`
echo filee is $fileStr
fi
for dir in $fileStr
do
echo file name is $dir
find $dir -name '*log*' -and -mtime +7 -type f | xargs rm
if [ $? -eq 0 ];then
echo $date delete $dir success!
else
echo $date delete $dir FAILD!
fi
done
done
(2)赋给deletelog.sh 文件执行权限
命令:chmod 700 /*/logs/deletelog.sh
(3)编辑crontab文件:
命令:vi /etc/crontab
输入I;进入编辑模式
在文件末尾写入步骤一的命令
配置任务定时时间:
crontab定时配置说明:
*(分) *(时) *(天) *(月) *(星期)
crontab中最终写入的命令为: * 9 * * * root /*/deletelog.sh >> /export/*/deletelog.log(带输出日志)