首页 > 其他分享 >详细分析crontab定时执行任务(附Demo | 定时清空Tomcat的实战)

详细分析crontab定时执行任务(附Demo | 定时清空Tomcat的实战)

时间:2024-05-26 12:31:27浏览次数:22  
标签:文件 logs Tomcat rm Demo crontab mtime path 定时

目录

前言

由于用户量大,且导出的日志以及缓存特别多,急需定期删除文件

在这里插入图片描述

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 {} \;

标签:文件,logs,Tomcat,rm,Demo,crontab,mtime,path,定时
From: https://blog.csdn.net/weixin_47872288/article/details/139142583

相关文章

  • datax和datax-web时间问题处理(定时任务没有按指定时间触发、日志时间错误)
    datax-web和datax各种时间不准问题此文目的为解决日志输出中的时间不准确问题和datax-web定时任务触发时间不对的问题(以东八区为例),但首先要确认操作系统的时间和时区是正常的!!!。总体思路就是修改时区,修改三个文件:datax.py、datax-executor.sh、datax-admin.sh在对应的位置加上时......
  • C#串口通讯 源码Demo
    在C#中进行串口通讯主要涉及到以下几个步骤:引入命名空间usingSystem.IO.Ports;创建SerialPort对象SerialPortport=newSerialPort();设置串口属性//设置串口名:port.PortName="COM1";//设置波特率:port.BaudRate=9600;//设置校验位:port.Parity=Parity.None;//......
  • LocalDateTimeDemo 日期 时间 字符串转换
    packagedemo;importjava.time.LocalDate;importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;publicclassLocalDateTimeDemo{ publicstaticvoidmain(String[]args){ LocalDateld1=LocalDate.now(); DateTimeFormatterdtf1......
  • 【xilinx】用流水线分析和重定时实现尽可能高的频率
            随着性能需求增加,架构级权衡产生的影响远比工具选项或简单的设计修改大。这种权衡通过插入流水线寄存器级把最长的关键路径切割成较小的、更快速的工作段,牺牲时延来提升时钟频率。        VivadoDesignSuite的流水线分析特性(report_pipeline_ana......
  • Springboot Tomcat 架构及参数优化
    1.SpringbootTomcat架构及参数优化1.1.版本说明1.2.SpringBootTomcat架构分析1.2.1.Tomcat核心组件类图1.2.2.Tomcat核心组件架构图1.3.SpringBootTomcat工作流程1.3.1.SpringBoot初始化Tomcat流程1.3.2.Tomcat启动流程1.3.2.1.初始化Server......
  • vue3+ts购物车demo
    <template><div><h1>ShoppingCart</h1><button@click="addItem">AddItem</button><button@click="deleteSelectedItems">DeleteSelectedItems</button><button@c......
  • 定时器组件设计方案
    层级时间轮实现高性能定时器此篇介绍时间轮,它的时间复杂度是最优的,插入、查找(最小)、删除都是O(1),很恐怖的性能这里示例一个三层时间轮,模拟时钟表盘的运作方式,便于理解且性能不低设计思路:1.根据定时任务的超时时间,按超时时间范围存入不同的链表中,处于同一个链表的任务的超......
  • Android JNI/NDK环境的配置与Demo编译
    一、背景​JNI(JavaNativeInterface)和NDK(NativeDevelopmentKit)在Android开发中扮演着重要的角色。JNI,即Java本地接口,是Java平台的一部分,它允许Java代码与其他语言写的代码进行交互。通过JNI,Java代码可以调用本地应用程序或库中的代码,也可以被本地代码调用。这主要使得......
  • Linux 开启定时任务执行脚本
    接到领导一个需求,要把压缩包放到当天日期的目录下,所以需要每天生成一个当前日期的文件夹1、创建sh文件,我这边命名为zip.sh#!/bin/bashtime=$(date"+%Y-%m-%d")##获取当前时间并且格式化时间##切换到这个目录下cd/root/app/bankcard/zip/mkdir"${time}"##创建以时......
  • SpringBoot动态定时任务
    其实SchedulingConfigurer实现方法很简单,只需要实现SchedulingConfigurer并重写configureTasks方法,在启动类必须加上@EnableScheduling注解即可。@Configuration@EnableScheduling@Slf4jpublicclassRuleTaskimplementsSchedulingConfigurer{privatevolatileSch......