如何配置单个AutoSys作业同时在多台Unix服务器上运行
实现方案
AutoSys原生直接在单cmd作业的machine字段填写多个主机名默认走负载均衡逻辑,只会挑选一台可用主机运行,要实现单JIL定义下作业在所有指定主机同步执行,有两种成熟实现方式:
方案1:Box作业 + 多机子作业(全版本兼容,最稳定)
该方案不依赖AutoSys高版本特性,通过父Box统一控制调度规则,每个目标服务器对应一个子作业,所有子作业归属同一个Box,Box触发时所有子作业会在各自绑定的主机上同时启动,完全满足多机同步执行需求。所有作业定义可以写在同一个JIL文件中,示例配置如下:
# 父Box作业,统一配置调度规则,子作业自动继承调度属性 insert_job: cleanup_box job_type: box description: "统一调度多机日志清理作业" owner: <user_name> date_conditions: y days_of_week: we,sa start_times: "00:00" alarm_if_fail: y alarm_if_terminated: y # 子作业1:对应第一台服务器 insert_job: cleanup_srv01 job_type: cmd description: "srv01服务器日志清理" box_name: cleanup_box machine: srv01 owner: <user_name> max_run_alarm: 0 alarm_if_fail: y alarm_if_terminated: y command: /test/autosys/cleanup.sh std_out_file: >> /test/autosys/cleanup_`hostname`_`date +%Y%m%d`.out std_err_file: >> /test/autosys/cleanup_`hostname`_`date +%Y%m%d`.err # 子作业2:对应第二台服务器 insert_job: cleanup_srv02 job_type: cmd description: "srv02服务器日志清理" box_name: cleanup_box machine: srv02 owner: <user_name> max_run_alarm: 0 alarm_if_fail: y alarm_if_terminated: y command: /test/autosys/cleanup.sh std_out_file: >> /test/autosys/cleanup_`hostname`_`date +%Y%m%d`.out std_err_file: >> /test/autosys/cleanup_`hostname`_`date +%Y%m%d`.err # 有多少台目标服务器,按照上述子作业格式追加对应配置即可
注意:原有样例配置中的
date+%Y%m%d存在语法错误,date命令和+格式参数之间必须加空格,否则执行时会报命令不存在错误。
方案2:开启run_all属性的机器组(适用于AutoSys 11.3.6 SP6及以上版本)
如果你的AutoSys版本满足要求,可以通过创建支持全节点执行的机器组实现,不需要定义多个子作业,配置更简洁:
- 首先在JIL中创建机器组(虚拟节点),添加
run_all: y参数,指定组内所有主机:
insert_machine: cleanup_all_hosts type: v machine: srv01 machine: srv02 machine: srv03 run_all: y
- 把清理作业直接绑定到这个机器组即可,作业触发时会自动在组内所有主机上同时运行:
insert_job: cleanup job_type: cmd description: "多机日志清理作业" machine: cleanup_all_hosts owner: <user_name> max_run_alarm: 0 alarm_if_fail: y alarm_if_terminated: y date_conditions: y send_notification: n days_of_week: we,sa start_times: "00:00" command: /test/autosys/cleanup.sh std_out_file: >> /test/autosys/cleanup_`hostname`_`date +%Y%m%d`.out std_err_file: >> /test/autosys/cleanup_`hostname`_`date +%Y%m%d`.err
配置注意事项
- 所有目标服务器必须提前在AutoSys管理器中完成节点注册,且对应节点的AutoSys agent正常运行,否则作业会卡在PENDING状态
- 若日志输出路径为服务器本地路径,要确保作业执行用户在对应路径下有写入权限
- 若需要统一汇总所有节点执行结果,可以把std_out、std_err配置到共享存储路径,避免日志散落在各服务器
内容的提问来源于stack exchange,提问作者soumahe
相关产品推荐
相关产品推荐

