最近通过jenkins部署线下环境,因为有备份的逻辑,导致产生大量的jar包占据大量存储,一不小心就满了。所以了解了下contab,写定时脚本主动删除jar包。
1.创建脚本
vim clean_backup_jar.sh
# 输入 find /路径/ -mtime +10 -name "*.jar.bak.*" -exec rm -rf {} \
# wq
# 路径相对绝对都可以,如果涉及到多个目录直接用上层目录就可以找到所有文件
# -mtime +10 代表前10天的就过期掉了
# -mtime (modify time)文件内容被修改时间
# -atime (access time)文件最近一次被访问时间
# -ctime (change time)文件状态更改的时间,比如权限,分组等属性的变化
# +10 中的+代表超过,-代表在时间内,不带符号代表等于
# -name 通过名称查找
# rm -rf 就是删掉该文件
2.修改文件权限
chown 777 clean_backup_jar.sh
3.执行周期
crontab -e
# 输入 0 0 * * 1 /路径/backup_sql_clean.sh,代表每周一执行
# wq保存
# 出现 crontab: installing new crontab才是成功的,/tmp/crontab.in8fYk":1: bad hour 代表有错误
# cron 的格式
# {minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
# o minute: 区间为 0 – 59
# o hour: 区间为0 – 23
# o day-of-month: 区间为0 – 31
# o month: 区间为1 – 12. 1 是1月. 12是12月.
# o Day-of-week: 区间为0 – 7. 周日可以是0或7.
4.执行cron
#查看状态
systemctl status crond.service
#重启
systemctl restart crond.service
5.注意事项
- 执行周期的格式问题容易出错,虽然形式和Java的cron相似,但是具体还是与很大区别,参照上述说明;
- 选择适合的匹配方式和执行周期,笔者想快速删掉冗余文件,导致部署还未完成就把上传的包干掉了;
- 正确方式先验证脚本是否可以正确执行,然后再用小的时间间隔来验证定时任务是否ok。