目录
- 前言
- 1. 基本知识
- 2. Demo
- 3. 实战
- 3.1 错误版本
- 3.2 正确版本
前言
由于用户量大,且导出的日志以及缓存特别多,急需定期删除文件
1. 基本知识
crontab 是一个用于定时执行任务的命令行工具,通常在 Unix 和类 Unix 系统中可用,表示一个包含需要定时执行的任务列表的表格
基本语法如下:
- 通常以 -e 参数启动,用于编辑用户的 crontab 文件
- crontab 文件由一系列任务组成,每个任务占据一行
- 每行任务的格式为:分 时 日 月 周 命令,各字段之间用空格分隔
分:分钟数(0-59)
时:小时数(0-23)
日:日期(1-31)
月:月份(1-12)
周:星期几(0-7,其中0和7表示星期日)
命令:要执行的命令或脚本
需要注意的事项如下:
-
每个用户都可以有自己的 crontab 文件
-
crontab 文件的路径通常是 /var/spool/cron/crontabs/用户名
-
使用
crontab -e
编辑 crontab 文件时,会自动打开一个文本编辑器,如 vi 或 nano -
保存和退出编辑器后,新的 crontab 文件会立即生效,无需重启 cron 服务
文件的特殊字符如下:
*
:代表任意值,通常用于不限制该字段的取值范围-
:代表范围,如 1-5 表示1到5,
:代表枚举值,如 1,3,5 表示1、3、5/
:代表步长,如 */10 表示每隔10@reboot
:表示在系统启动时执行一次任务@yearly、@annually、@monthly、@weekly、@daily、@midnight、@hourly
:这些是预定义的时间间隔,分别表示每年、每月、每周、每天、每天午夜、每小时
crontab基本的命令如下:
crontab -l
:查看当前用户的 crontab 文件内容。crontab -e
:编辑当前用户的 crontab 文件。crontab -r
:删除当前用户的 crontab 文件
2. Demo
示例 1:每小时备份文件
每小时备份某个目录中的文件到另一个目录,可以设置两个不同的任务来执行备份操作
# 每小时备份文件
0 * * * * /usr/bin/rsync -avz /path/to/source/ /path/to/backup/
示例 2:每天早上清理日志文件
每天早上6点清理某个目录中的日志文件,可以设置一个定时任务来执行清理操作
# 每天早上6点清理日志文件
0 6 * * * /bin/find /path/to/logs/ -type f -mtime +7 -exec /bin/rm {} \;
示例 3:每周日备份数据库
希望每周日凌晨3点备份数据库,可以设置一个定时任务来执行备份操作
# 每周日凌晨3点备份数据库
0 3 * * 0 /usr/bin/mysqldump -u username -pPassword dbname > /path/to/backup/db_backup.sql
示例 4:每月第一天生成报告
需要在每个月的第一天生成一个报告,可以设置一个定时任务来执行报告生成操作
# 每月第一天生成报告
0 0 1 * * /usr/bin/python /path/to/script/generate_report.py
示例 5:每小时检查服务器状态
希望每小时检查一次服务器的状态并将结果记录到日志文件,可以设置一个定时任务来执行检查操作
# 每小时检查服务器状态
0 * * * * /usr/bin/bash /path/to/script/check_server_status.sh >> /var/log/server_status.log 2
3. 实战
以定期删除Tomcat日志文件为基础
由于tomcat在运行时无法删除logs文件,所以需要单独弄个脚本
错误版本为上述Demo的操作
3.1 错误版本
- 文件编辑:
crontab -e
添加定时任务:
0 0 * * * find /usr/local/tomcat/apache-tomcat-7.0.85/logs -mtime +1 -exec rm -rfv {} \;
0 0 * * * find /usr/local/tomcat/apache-tomcat-7.0.85/temp/bdf2-export-temp/ -mtime +1 -exec rm -rfv {} \;
截图如下:
确保crontab 任务已正确配置,可以使用以下命令查看当前用户的定时任务:crontab -l
为了方便后续处理,也可使用如下方式做一个归类:
在某个位置设置一个脚本文件,记住脚本文件名以及路径:
#!/bin/bash
export LANG=zh_CN
#tomcat日志文件路径
export WEB_TOMCAT1=/usr/local/tomcat/apache-tomcat-7.0.85/logs
echo > ${WEB_TOMCAT}/catalina.out
find ${WEB_TOMCAT}/* -mtime +7 -type f -exec rm -f {} \;
截图如下:
设置脚本可执行:chmod a+x cleanTomcatlog.sh
编辑用户的 crontab 文件:crontab -e
添加定时任务:30 04 * * * /usr/local/script/cleanTomcatlog.sh
3.2 正确版本
编制正确的删除脚本:(定期删除一天前的日志)
-mtime +1表示查找超过一天前修改的文件。如果你需要精确匹配前一天的文件,可以使用-mtime 1。但是,通常情况下,-mtime +1已经可以删除超过一天的旧文件
#!/bin/bash
logs_path="/usr/local/tomcat/apache-tomcat-7.0.85/logs"
temp_path="/usr/local/tomcat/apache-tomcat-7.0.85/temp/bdf2-export-temp"
# 定时清理超过1天的Tomcat日志脚本
find $logs_path -mtime +1 -name "localhost_access_log.*.txt" -exec rm -rf {} \;
find $logs_path -mtime +1 -name "localhost.*.log" -exec rm -rf {} \;
find $logs_path -mtime +1 -name "catalina.*.log" -exec rm -rf {} \;
find $logs_path -mtime +1 -name "manager.*.log" -exec rm -rf {} \;
find $logs_path -mtime +1 -name "host-manager.*.log" -exec rm -rf {} \;
find $logs_path -mtime +1 -name "catalina.out" -exec rm -rf {} \;
>$logs_path/catalina.out;
# 定时清理超过1天的临时导出文件
find $temp_path -mtime +1 -name "*.xls" -exec rm -rf {} \;
为了让其定期执行,正确还是结合crontab来操作:crontab -e
截图如下:
对于文件的匹配规则,最好观察下格式
有些可能多个
find $logs_path -mtime 1 -name "catalina.out.*" -exec rm -rf {} \;