定时删除app.log开头的日志文件,只保留最近修改的7个文件
一、创建shell脚本
(1)创建执行脚本vim cleanLog.sh
#!/bin/bash
searchPath=/usr/local/tomcat7/logs
cd ${searchPath}
#获取文件总数
declare -i total=`ls app.log.* | wc -l`
#获取要删除的文件总数,保留最近7个
declare -i nums=$total-7
#要删除的总文件数大于1,就删除他们
if [ "${nums}" -ge 1 ];then
#删除列出的文件
rm -rf `ls -tr app.log.* | head -${nums}`
fi
(2)为cleanLog.sh
加添加执行权限
chmod +x cleanLog.sh
二、使用crontab 定时任务
(1)第一次使用crontab -e
,请选择3。如图:
如果选择错了可能出现无法编辑。crontab -l
会出现no crontab for root - using an empty one可以使用命令Select a editor
重新选择(或者用select-editor
)
(2)使用crontab -e
命令创建新的定时任务,可以像vim一样编辑文件
每分钟执行一次脚本
* * * * * /usr/local/cleanLog.sh
(3)使用crontab -l
命令查看定时任务
(4)service cron restart
重启crontab服务使定时任务生效
crontab 其它命令请参考:https://www.runoob.com/w3cnote/linux-crontab-tasks.html
三、出现的问题和解决方案
(1)使用crontab -e
保存出现下图的情况
这是系统提示/var/spool/cron/root文件没有修改的权限。
解决方案:
-
sattr可用来查看文件的属性:
lsattr /var/spool/cron/root
如果文件属性中有i与a,或者有其中的一个 -
可以使用chattr去掉这属性:
chattr -ia /var/spool/cron/root
-
再次使用
crontab -e
就可以了。
解决方案请参考:https://blog.csdn.net/SweeNeil/article/details/103237214/