Linux脚本定时清理日志任务
定时清理日志任务前言一.定时清理简述1.1查看/etc/crontab文件1.2 删除文件命令1.3 给脚本添加权限:1.4 将脚本添加到定时任务2.计划任务2.1创建shell2.2 编辑shell脚本:2.3计划任务:前言当我们在生产过程中,都会遇到诸如此类的问题。定时清理日志成为了必不可少的一步骤!一.定时清理简述当我们要定期的备份以及删除时,我们需要写一个shell 脚本,然后用 cron
定时清理日志任务
前言
当我们在生产过程中,都会遇到诸如此类的问题。定时清理日志成为了必不可少的一步骤!
一.定时清理简述
当我们要定期的备份以及删除时,我们需要写一个shell 脚本,然后用 crontab 来每天定期执行。
1.1查看/etc/crontab文件
linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux系统上面原本就有非常多的计划性工作,因此这个系统服务是
默认启动
的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux系统也提供了使用者控制计划任务的命令 :crontab 命令。
cron是linux下
用来周期性的执行某种任务或等待处理某些事件的一个守护进程
,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cron进程
,cron进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务
。Linux下的任务调度分为两类,
系统任务调度和用户任务调度
。系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在
/etc目录下有一个crontab文件
,这个就是系统任务调度的配置文件
。
其中具体内容含义:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
1.2 删除文件命令
find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;
实例命令:
find /usr/local/tomcat/logs/ -mtime +30 -name "*.log" -exec rm -rf {} \; //将/opt/soft/log/目录下所有30天前带".log"的文件删除。
说明:
具体参数说明如下:
find:linux的查找命令,用户查找指定条件的文件;
/opt/soft/log/:想要进行清理的任意目录;
-mtime:标准语句写法;
+30:查找30天前的文件,这里用数字代表天数;
"*.log":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三;
-exec:固定写法;
rm -rf:强制删除文件,包括目录;
{} \; :固定写法,一对大括号+空格+\+;
(注意:可添加:0 */1 * * * echo “Have a break now.” >>
/usr/local/myScript/logs/test.txt每一个小时往test.txt中插入一条数据,主要用于测试是否执行该脚本。
)
1.3 给脚本添加权限:
1.4 将脚本添加到定时任务
vim /var/spool/cron/root
10 1 * * * /usr/local/myScript/cleanlog.sh 每天凌晨1点10分执行
(还可以使用命令直接进入编辑:crontab -e)
查看定时任务:crontab -l
2.计划任务
如果觉得每次都是手动执行语句太麻烦,可以将这小语句写到一个可执行shell脚本文件中,再设置cron调度执行,那就可以让系统自动去清理相关文件。
2.1创建shell
touch /opt/soft/bin/auto-del-30-days-ago-log.sh
chmod +x auto-del-30-days-ago-log.sh
新建一个可执行文件auto-del-30-days-ago-log.sh,并分配可运行权限
2.2 编辑shell脚本:
vi auto-del-30-days-ago-log.sh
编辑auto-del-30-days-ago-log.sh文件如下:
#!/bin/sh
find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
ok,保存退出(:wq)。
2.3计划任务:
#crontab -e
将auto-del-30-days-ago-log.sh执行脚本加入到系统计划任务,到点自动执行
输入:
10 0 * * * /opt/soft/log/auto-del-30-days-ago-log.sh
这里的设置是每天凌晨0点10分执行auto-del-30-days-ago-log.sh文件进行数据清理任务了。
完成以上三步,你就再也不每天惦记是否硬盘空间满了,该清理日志文件了,再也不会受到服务器硬盘空间不足的报警信息了,开心的去玩耍吧!
三.经典案例
一、删除XX天(默认10天)之前某个目录下面带.log的日志文件,并且输出文件显示删除的文件
#!/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天)之前的文件夹
#!/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
#!/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定时任务
执行命令:
[root@localhost ~]# crontab -e
10 0 * * * /data/auto-del.sh >/dev/null 2>&1
查看定时任务:
[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@centos7 /]# service crond restart
启动服务命令:[root@centos7 /]# service crond start
停止服务命令:[root@centos7 /]# service crond stop
参考:https://blog.csdn.net/qq_39291929/article/details/79054452
https://www.cnblogs.com/think-in-java/p/5712197.html
https://www.cnblogs.com/zuoshaowei/p/10577443.html
更多推荐
所有评论(0)