Autosys作业每季度起始后第40天触发规则配置咨询
Autosys季度顺延触发规则实现方案
Autosys原生时间规则无法直接支持「季度起始日+40天+非工作日顺延」的复合规则,可通过以下两种成熟方案实现:
方案1:Autosys自定义日历+调度规则(推荐,原生实现稳定性更高)
适合规则固定、无需频繁调整的场景,完全通过Autosys自带能力实现,无需额外开发脚本:
- 第一步:提前计算未来3-5年每季度的原始触发基准日:以每季度1号为起始日,加39天(含起始日)得到第40天的原始日期,比如2024年的基准日为2月9日、5月10日、8月9日、11月9日。
- 第二步:创建Autosys全局工作日历
CHN_WORKDAY_CAL,将所有周六、周日、公司法定节假日标记为非工作日,调休补班的日期标记为工作日。 - 第三步:创建自定义触发日历
QUARTER_40DAY_CAL,将第一步计算的所有原始基准日导入,同时配置顺延规则adjust: workday,即遇到非工作日自动顺延到下一个符合工作日历的日期。 - 第四步:作业定义中绑定触发日历,设置执行时间即可。
作业定义示例:
/* Autosys JIL 配置示例 */ insert_job: QUARTER_40DAY_BIZ_TASK job_type: CMD command: /opt/biz/exec_task.sh machine: biz_app_server_01 run_calendar: QUARTER_40DAY_CAL start_times: "09:30" timezone: PRC owner: autosys_ops permission: gx,mx description: 每季度第40天(非工作日顺延)执行的业务作业
方案2:自定义日期校验脚本+每日触发(灵活度更高,适合规则频繁调整场景)
无需提前维护日历,通过脚本自动计算触发日,适合临时需求或者规则会动态调整的场景:
- 第一步:开发日期校验脚本,逻辑为:先计算当前季度的第40天原始日期,再自动顺延跳过周末/节假日,判断当日是否为最终触发日,符合条件返回0,不符合返回1。
- 第二步:Autosys作业配置为每日固定时点触发,先执行校验脚本,返回0才启动实际业务脚本,否则直接退出。
Python校验脚本示例:
import datetime from datetime import timedelta # 可自定义公司法定节假日列表 HOLIDAYS = { datetime.date(2024, 5, 1), datetime.date(2024, 5, 2), datetime.date(2024, 5, 3), # 按需补充后续年份节假日即可 } # 可自定义调休补班的周末列表 WORK_WEEKENDS = { datetime.date(2024, 4, 28), datetime.date(2024, 5, 5) } def is_valid_workday(date): if date in HOLIDAYS: return False if date in WORK_WEEKENDS: return True return date.weekday() < 5 # 0-4为周一到周五 def is_trigger_day(): today = datetime.date.today() # 计算当前季度起始日 quarter_start_month = (today.month - 1) // 3 * 3 + 1 quarter_start = datetime.date(today.year, quarter_start_month, 1) # 计算第40天原始日期(含起始日所以加39天) raw_trigger = quarter_start + timedelta(days=39) # 顺延到下一个工作日 final_trigger = raw_trigger while not is_valid_workday(final_trigger): final_trigger += timedelta(days=1) return today == final_trigger if __name__ == "__main__": exit(0 if is_trigger_day() else 1)
作业command配置示例:python /opt/script/check_trigger.py && /opt/biz/exec_task.sh
校验验证
作业配置完成后可执行autorep -J 作业名 -c查询未来1年的触发时间,和预期计算结果对比确认规则生效。
内容的提问来源于stack exchange,提问作者Dhivya
相关产品推荐
相关产品推荐

