You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Control-M中调度从月末最后工作日到月末最后日历日的每日作业?

Control-M作业调度:实现当月最后工作日至月末的运行周期

要配置作业在当月最后一个工作日到当月最后日历日期间每日运行(比如示例中9月最后工作日为28日,则运行28、29、30日),可以通过以下几种可靠方式实现:

方法一:自定义日历匹配法

这是最直观的Control-M原生实现方式:

    1. 新建自定义日历:在Control-M日历管理模块中,为每个月标记从「当月最后工作日」到「当月最后一天」的所有日期。若需批量维护,可使用ctmcal命令导入预定义的日历配置文件,避免手动逐个月份配置。
    1. 绑定作业调度:在目标作业的调度属性中,设置基础运行周期为「每日」,再将该自定义日历设为作业的包含日历,作业只会在自定义日历标记的日期运行。

方法二:内置变量+调度条件组合

利用Control-M的内置日期变量和条件逻辑,无需额外维护日历:
在作业的调度规则中添加两个逻辑或的条件:

  • 条件1:$DATE = $LAST_WORKDAY_OF_MONTH(匹配当月最后一个工作日,变量名称需根据Control-M版本调整,部分版本为%LAST_WORKDAY%)
  • 条件2:$DATE > $LAST_WORKDAY_OF_MONTH AND $DATE <= $LAST_DAY_OF_MONTH(匹配最后工作日之后到月末的所有日期)

设置完成后,作业会自动判断当日是否符合任一条件,符合则运行。

方法三:脚本前置校验法

如果需要结合自定义工作日历做动态判断,可通过前置脚本实现:
编写Shell脚本校验当日是否在目标周期内,示例脚本如下:

#!/bin/bash
# 替换为你的Control-M工作日历名称
WORK_CAL="YOUR_WORK_CALENDAR"
# 获取当月最后一个工作日(基于指定工作日历)
LAST_WORKDAY=$(ctmpsm -listcal -calname $WORK_CAL -date $(date +%Y%m01) -lastworkday)
# 获取当月最后一天
LAST_DAY=$(date -d "$(date +%Y-%m-01) +1 month -1 day" +%Y%m%d)
# 获取当日日期
TODAY=$(date +%Y%m%d)

# 校验日期范围
if [ $TODAY -ge $LAST_WORKDAY ] && [ $TODAY -le $LAST_DAY ]; then
    exit 0  # 符合条件,允许作业运行
else
    exit 1  # 不符合条件,跳过运行
fi

将该脚本配置为作业的前置条件,设置为「脚本返回0时允许运行」即可。

内容的提问来源于stack exchange,提问作者Sujingo Tmrkill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:45:36