一、删除XX天(默认10天)之前某个目录下面带.log的日志文件,并且输出文件显示删除的文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/bin/sh #如果没有输入变量值,默认天数为10 start=$( date +%y-%m-%d-%H%M%m) File= /temp/delete_ $start.txt FilePath= /data echo $File if [ ! -n "$1" ]; then day=10 else day=$1 fi #-mtime 10 表示文件修改时间距离当前为0天的文件,即距离当前时间不到1天(24小时)以内的文件 echo "输出日志文件:" echo "find $FilePath -mtime +$day -name " *.log* " > $File" find $FilePath -mtime +$day -name *.log* > $File echo "删除日志文件:" echo "find $FilePath -mtime +$day -name " *.log* " -exec rm -rf {} \;" find $FilePath -mtime +$day -name *.log* - exec rm -rf {} \; |
二、删除XX天(默认10天)之前的文件夹
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #!/bin/sh #如果没有输入变更值,默认天数为10 start=$( date +%y-%m-%d-%H%M%m) File= /temp/delete_backup_ $start.txt FilePath= /data/backup echo $File if [ ! -n "$1" ]; then day=10 else day=$1 fi #删除10天之前的文件夹 echo "输出日志文件:" echo "find $FilePah -type d -ctime +$day > $File" find $FilePath - type d -ctime +$day > $File #压缩10天之前的文件夹 echo "find $FilePath -type d -ctime +$day | xargs gzip -r" find $FilePath - type d -ctime +$day | xargs gzip -r echo "删除日志文件:" echo "find $FilePath -type d -ctime +$day | xargs rm -rf" find $FilePath - type d -ctime +$day | xargs rm -rf |
三、清空文件内容(产生日志文件过大,占用磁盘空间),可以与定时任务结合使用
每天早上6点执行 0 6 * * * sh /log/CleanLogFile.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #!/bin/bash path= /log filename=$path /BigLog .txt #搜索大于10KB的文件 #-size +10k #搜索小于10KB的文件 #-size -10k #搜索等于10KB的文件 #-size 10k if [ $ # -ne 1 ] then #echo "默认设置文件大小为500M" filesize=500M else filesize=$1 fi echo "设置清除文件大小:$filesize" if [ -f "$filename" ]; then rm -rf $filename echo "原始文件已删除" else echo "$filename不存在" fi find $path -name "*.*" -size +$filesize - exec ls -lh {} \; | awk '{ print $5,$9}' > $filename for line in ` cat $filename` do #如果有匹配的内容则立即返回状态值0 echo "$line" | grep -q "$path" #$? 是指上一条命令的执行状态, 0就是正常 if [ $? - eq 0 ] then #获取文件类型 filetype=${line #*.} if [ $filetype == "zip" ]; then echo "rm -rf $line" rm -rf $line else echo "执行清空命令 cat /dev/null > $line" cat /dev/null > $line fi fi done |
编写shell定时任务
执行命令:
1 2 3 | [root@localhost ~] # crontab -e 10 0 * * * /data/auto-del .sh > /dev/null 2>&1 |
查看定时任务:
1 2 | [root@localhost ~] # crontab -l 10 0 * * * /data/auto-del .sh > /dev/null 2>&1 |
备注:
每隔30分钟root执行一次:*/30 * * * * /data/auto-del.sh >/dev/null 2>&1
每天晚上1点执行:0 1 * * * /data/auto-del.sh >/dev/null 2>&1
1.通过crontab –e来创建自己的定时任务,5个*的含义是,第一个*是分,第二个*是小时,第三个*是日,第4个*是月,第5个*是周,第6列是命令
2.-exec command {} \; —–将查到的文件执行command操作,{} 和 \;之间有空格
3.find 命令三个选项用于按照时间查找,单位都是小时:
mtime — 文件内容上次修改时间
atime — 文件被读取或访问的时间
ctime — 文件状态变化时间
情况一:正常情况(系统有service命令)
重启服务命令:[root@centos6 /]# service crond restart
启动服务命令:[root@centos6 /]# service crond start
停止服务命令:[root@centos6 /]# service crond stop
4.如果需要用到环境变量,必须的脚本中添加环境变量
例如,加载java变量
1 2 3 | export JAVA_HOME="/opt/jdk1.8.0_91" export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$PATH:$LAMPP_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:${ANT_HOME}/bin |