cron表达式 每天0点10分和30分_查找特定时间段cron任务方法

部署运行你感兴趣的模型镜像

bd9131593803dedc93f6ae30255ba44a.png

查找特定时间段cron任务方法

今天有个同学问:“如何查找特定时间段的cron调度任务?”, 这类问题通常是维护中经常遇到的,例如:

生产系统升级时,比如0点生产业务处理任务停止,到了5点0分恢复生产业务处理程序运行,那么在0点到5点前的调度任务就要人工运行了。

如果生产的cron调度任务有10个,一眼就能看完,如果有100个调度任务呢?这就要靠脚本来提取了。

先来说下cron配置规则:

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │                                   7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <command to execute>

其中,每个字段格式:可以包含`逗号(,:表示离散点)`、`减号(-:表示时间段a-b)`。

知道配置规则后,接下来就开始是心啊查找cron调度任务区间 [s,e)的方法:

以下面几个调度为例:

0 0,10 * * * sh /path/to/job1.sh >/dev/null 2>&1
0 0-5 * * * sh /path/to/job2.sh >/dev/null 2>&1
0 1-2,5-10 * * * sh /path/to/job3.sh >/dev/null 2>&1
0 * * * * sh /path/to/job4.sh >/dev/null 2>&1
0 23 * * * sh /path/to/job5.sh >/dev/null 2>&1

如上几个调度示例,我们可以通过使用get_cron脚本正确的提取出:

$ get_cron 2
0 1-2,5-10 * * * sh /path/to/job3.sh >/dev/null 2>&1
0 * * * * sh /path/to/job4.sh >/dev/null 2>&1

$ get_cron 2-11
0 0,10 * * * sh /path/to/job1.sh >/dev/null 2>&1
0 0-5 * * * sh /path/to/job2.sh >/dev/null 2>&1
0 1-2,5-10 * * * sh /path/to/job3.sh >/dev/null 2>&1
0 * * * * sh /path/to/job4.sh >/dev/null 2>&1

get_cron脚本源代码如下:

#!/usr/bin/env bash
########################################################################
# File Name: get_cron
# Author: 悟空的学习笔记
# Website: https://www.learnhard.cn
# Created Time: 2021年01月16日 星期六 17时21分01秒
########################################################################

usage()
{
    cat <<END
usage:
    `basename $0` <start-hour> [end-hour]
    查找cron调度任务区间 [s,e)方法
END
}

if [ "$#" -lt "1" ] ; then
    usage
    exit 0
fi

s="$1"
e="$2"
if [ "$e" = "" ] ; then
    let e="$s+1"  # 取当前一小时内调度
fi

# 查找调度区间 [s,e)
crontab -l | awk -v s=$s -v e=$e '!/^#|^$/{
    hours_field = $2
    # 每小时都执行
    if( hours_field !~/^[0-9]|*/)
        next
    if (hours_field == "*") {
        print $0
        next
    }
    # 分离离散小时点
    n=split(hours_field ,hours_points , ",");
    for(i=1; i<=n;i++) {
        # 分离小时段
        m = split(hours_points[i] ,hours_line , "-");
        if(m <= 2) { # a-b or a
            a = hours_line[1]
            if( a >= s && a < e){
                ##   ---s---a---b1---e---b2-->
                print $0;
                next
            }
            else if( m == 2){
                b = hours_line[2]
                ##   --a--s----b---e--->
                if( b >= s && b < e) {
                    print $0
                    next
                }
            }
        }
    }
}'

了解更多Awk命令使用知识可以阅读Awk编程入门到精通,通过学习与实践,让你轻松掌握Awk编程方法。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>首先,用户的问题是:“我想查找表示每天cron表达式 请问表示每天cron表达式”。我需要基于系统级指令用户的问题来回答。 系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 用户提供了引用: - 引用[1]:描述了cron表达式的格式,如[minute] [hour] [day of month] [month] [day of week] [program to be run]。取值范围例子,如每天凌晨5:00重启。 - 引用[2]:给出了更多例子,如H 5 * * 1表示每周一上午五执行,以及间隔符的解释。 用户的问题是直接问“表示每天cron表达式”。所以,我需要给出正确的cron表达式来表示每天凌晨5执行任务。 从引用中: - cron表达式有五个字段:钟、小时、日期、月份、星期。 - 字段顺序:[minute] [hour] [day of month] [month] [day of week] 对于每天: - 小时:5(因为5) - 钟:0(假设是整,用户没指定钟,所以默认为0) - 日期:任意(*) - 月份:任意(*) - 星期:任意(*) 所以,标准cron表达式应该是:0 5 * * * 验证引用: - 引用[1]有例子:每天凌晨5:00重启 → 这应该对应0 5 * * * - 引用[2]有H 5 * * 1,但那是每周一,不是每天。H可能表示Hashed random time或其他,但在这个上下文,用户问每天,所以用固定值。 在cron中,"H"常用于Jenkins或其他系统表示随机时间,但标准cron使用数字或*。用户引用了H,但在回答中,我应该基于标准cron,因为用户没有指定系统。 用户说“参考站内引用”,所以我需要整合引用。 最终表达式:对于每天凌晨5整,cron表达式0 5 * * * 现在,回答结构: - 使用中文。 - 结构清晰,逐步解决问题。 - 引用末尾添加引用标识,如[^1]。 - 生成相关问题。 回答步骤: 1. 解释cron表达式的格式。 2. 给出每天表达式。 3. 简要解释为什么这样写。 4. 添加引用。 5. 生成相关问题。 生成相关问题: - 基于cron主题,例如: - 如何表示每小时执行? - 如何表示周末执行? - 等等。 相关问题列表: 1. 如何表示每小时执行的cron表达式? 2. 如何在cron中表示特定日期执行? 3. cron表达式中星号(*)是什么意思? 4. 如何测试cron表达式是否有效? 确保回答可靠:基于提供的引用标准知识。 完整回答: - 开头解释。 - 给出表达式。 - 解释字段。 - 添加引用。 - 最后相关问题。 </think>### Cron表达式:表示每天的配置 根据您提供的站内引用信息,cron表达式用于定义计划任务的执行时间,格式为`[minute] [hour] [day of month] [month] [day of week]`。要表示每天凌晨5整执行任务(假设钟为0,即整),cron表达式应为: **`0 5 * * *`** #### 解释: - **钟 (minute)**:设为 `0`,表示每小时的第0钟(即整)。 - **小时 (hour)**:设为 `5`,表示凌晨5(取值范围0-23)。 - **日期 (day of month)**:设为 `*`(星号),表示任意日期(取值范围1-31)。 - **月份 (month)**:设为 `*`,表示任意月份(取值范围1-12)。 - **星期 (day of week)**:设为 `*`,表示任意星期(取值范围0-7,其中0或7代表星期日)。 此配置确保任务每天凌晨5:00准时执行,不受日期或月份限制。如果需要更精确的时间(如5:30),只需调整钟字段即可[^1][^2]。 #### 示例应用: - 在Linux系统中,添加到crontab文件后,任务会在每天5自动运行。 - 例如,每天5重启服务:`0 5 * * * /usr/sbin/reboot`(程序路径根据实际需求填写)[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值