#任何事情,都有一个过程,坚持一下,再坚持一下。播种和收获,本来就不在一个季节!
在上一篇文章中,介绍了如何在代码中生成以日期为文件名的log文件。
无休止的生成日志文件,最终磁盘肯定会满,所以我们需要做日常清除。
首先分析需求:
- 找到所需删除的文件
- shell脚本执行删除命令
- 定期执行shell脚本
我们需要了解:
- 一些Linux的shell脚本知识
- linux中文件查找命令
- 定期执行程序
#1 shell脚本知识
shell变量
1.左边是变量名,右边是变量内容,注意=左右不能直接跟空格。
2.变量名,可以是字母数字组合,但数字不能开头。
name=jiafeng
2name = jiafeng 错误
3变量内容可以用 “” ‘’ 引起,“”中的$保持本意, ''中的则是纯文本
work="/c/hello/server/work/ttt/test"
cd $work
#2 linux文件查找命令
# 文件名查找
whereis [-bmsu] 文件名或目录名称
locate [-ir] keyword
-i 忽略大小写的差异
-r 后面可接正则表达式的显示方式
find [PATH] [option] [action]
1.时间相关 -atime. -ctime. -mtime
-mtime n : n为数字,意义在n天之前的“一天之内”被更改过的文件
-mtime +n :列出在n天前(不含n天本身)被更改过的文件名称
-mtime -n :列出在n天前(含n天本身)被更改过的文件名称
-mtime file :file 为一个存在的文件,列出比file还要新的文件名
例如:
find /var -mtime +4 大于等于五天前的文件名
find /var -mtime -4 小于等于四天内的文件名
find /var -mtime 4 代表4~5那一天的文件名
-exec command :
-exec 后面可再接其他命令来处理到的结果,其中下面的ls -l 就是
find / -perm +7000 -exec ls -l {} \;
{}代表是由find找到的内容,find的结果会被放到{}位置中。
-exec 一直到 \; 是关键字,代表find的额外命令的开始(-exec)到结束(\;)
在这中间的就是find命令内的额外命令。例如上面的“ ls -l {} ”
#3 定期执行程序
crontab --help
crontab: illegal option -- -
crontab: usage error: unrecognized option
usage: crontab [-u user] file
crontab [-u user] { -e | -l | -r }
其中:
-e : 执行文字编辑器来设定时程表
-r : 删除目前的时程表
-l : 列出目前的时程表
#使用文字编辑器来设定时
#f1 f2 f3 f4 f5 program
# .---------------- minute (0 - 59)
# | .-------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
例如:我们想要每周执行一次
#设置定时任务
crontab -e
#接下来会打开vim编辑器,只需按照下面的格式输入即可
# * * * * * user-name command to be executed
* * 1-31/7 * * /home/jiafeng/clearLog.sh
1-31/7则代表,1-31天中每7天执行一次清理命令
#当然除了 - / 还有 , 每个符号都代表一种含义
星号(*):代表所有可能的值
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,在月份上“1,31”代表,一个月的第一天和31天时候
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
具体步骤
#创建定时服务
crontab -e
#编写服务
* * 1-31/7 * * /home/jiafeng/clearLog.sh
#重启服务
service crond restart
#列出目前的时间表
crontab -l
将上面的知识汇总的shell脚本
#! /bin/sh
log_path="/Users/jiajipengzhuanyong/Desktop/CODE/racobit/write/LOG"
#目录存在,删除修改时间为7天前的文件
if [ -d "${log_path}" ]; then
echo start delete log 3 days ago...
#在${log_path}路径下查找所有txt文件,删除三天前的文件
find "${log_path}"/* -name '*.txt' -mtime +3 -exec rm -rf {} \;
echo end delete log ...
fi
建议:开始执行的时候,定时时间稍微短点做下测试!
Eed 2021/7/7 22:17
转载请注明:XAMPP中文组官网 » linux c日志文件定时清除