如何为JCL作业添加SCHEDULE/STARTBY实现定时周期性执行?
JCL作业周期性自动执行的实现方案
在MVS环境中,实现JCL作业每日固定时间自动执行,最常用的方式就是利用JOB语句的SCHEDULE参数,STARTBY则多用于指定作业的最早启动时机,以下是具体的配置方法:
一、用SCHEDULE配置周期性执行
SCHEDULE是JOB语句的扩展参数,直接定义作业的重复执行规则,支持每日、每周、每月等周期模式。
1. 每日固定时间执行示例
//DAILYJOB JOB (PROD_ACCT),'DAILY DATA PROCESS',CLASS=B, // SCHEDULE=(DAILY,DATE=0000,TIME=0200) //STEP01 EXEC PGM=DATA_LOAD //INPUT DD DSN=PROD.DATA.INPUT,DISP=SHR //OUTPUT DD DSN=PROD.DATA.OUTPUT,DISP=(NEW,CATLG,DELETE) //...
DAILY:指定周期为每日执行DATE=0000:表示从作业提交当日开始循环执行(若要指定起始日期,可改为DATE=20240601这样的格式)TIME=0200:指定每日凌晨2点启动作业
2. 工作日(周一至周五)执行示例
如果只需要在工作日执行,可添加DAY参数:
//WEEKDAYJOB JOB (PROD_ACCT),'WEEKDAY BATCH',CLASS=B, // SCHEDULE=(WEEKLY,DATE=20240601,TIME=0300,DAY=(MON,TUE,WED,THU,FRI)) //STEP01 EXEC PGM=REPORT_GEN //...
WEEKLY:周期为每周DAY=(MON,TUE,WED,THU,FRI):限定仅周一至周五执行
二、STARTBY的用法(配合调度或单次延迟)
STARTBY主要用于指定作业最早可被调度执行的时间,通常和SCHEDULE配合使用,或者用于单次作业的延迟启动:
1. 配合SCHEDULE确保启动时间
//SCHEDJOB JOB (PROD_ACCT),'SCHEDULED BATCH',CLASS=B, // SCHEDULE=(DAILY,TIME=0200),STARTBY=0200 //STEP01 EXEC PGM=FILE_BACKUP //...
这里STARTBY=0200确保作业不会在凌晨2点前被调度,和SCHEDULE的TIME参数形成双重约束,避免系统负载过高时提前执行。
2. 单次延迟启动
如果只需要让作业在某个特定时间单次执行,直接用STARTBY即可:
//ONETIMEJOB JOB (PROD_ACCT),'ONE-TIME RUN',CLASS=B, // STARTBY=20240601/0800 //STEP01 EXEC PGM=DATA_EXPORT //...
20240601/0800:指定2024年6月1日上午8点启动作业
三、关键注意事项
- 不同JES版本(JES2/JES3)对
SCHEDULE参数的支持细节可能有差异,需参考你所在系统的官方文档确认可用参数。 - 提交带
SCHEDULE的作业后,系统会自动生成后续周期的作业实例,可通过JES命令(如JES2的$DJ)查看待执行的作业队列。 - 若要终止周期性调度,可使用系统命令(如JES2的
$T JOBxxxx,SCHEDULE=CANCEL,其中JOBxxxx是作业编号)取消循环。
内容的提问来源于stack exchange,提问作者Soraya
相关产品推荐
相关产品推荐

