如何在Autosys的File Watcher作业中获取文件名并传递给后续作业?
解决Autosys File Watcher获取触发文件名并传递给后续作业的问题
嘿,作为Autosys新手碰到这个需求很正常,我来一步步帮你搞定!当你用watch_file=*配置File Watcher作业监控目录下的文件到达后,要获取触发的具体文件名并传给下一个作业,核心是利用Autosys的内置环境变量,具体操作如下:
1. 确认File Watcher作业的基础配置
首先确保你的File Watcher作业(比如命名为FW_MONITOR_FILES)的核心配置没问题,示例如下:
insert_job: FW_MONITOR_FILES job_type: FW machine: your_target_server watch_file: /your/target/directory/* watch_interval: 60 # 每60秒检查一次目录 start_times: "00:00"
这里watch_file设为目录路径加*,会监控该目录下所有新创建/到达的文件。
2. 利用Autosys内置变量获取触发文件名
Autosys的File Watcher作业在触发时,会自动设置一个内置环境变量 $AUTO_FW_FILENAME,这个变量的值就是触发作业的那个文件的完整路径(比如/your/target/directory/data_20240520.csv)。
3. 配置后续作业接收并使用这个文件名
有两种常见的方式把这个变量传递给后续作业:
方式一:通过send_event直接触发并传参
在你的File Watcher作业中添加send_event配置,当文件到达触发作业后,自动触发后续作业并带上文件名参数:
insert_job: FW_MONITOR_FILES # 其他基础配置... send_event: CHANGE_STATUS JOB:PROCESS_FILE_JOB RUN; PARM:"FILENAME=$AUTO_FW_FILENAME"
后续作业PROCESS_FILE_JOB可以在命令中直接引用这个参数,比如如果是脚本作业:
insert_job: PROCESS_FILE_JOB job_type: CMD machine: your_target_server command: /path/to/your/processing_script.sh $FILENAME
方式二:通过作业依赖直接引用变量
如果后续作业和File Watcher作业在同一个box中,或者有明确的依赖关系,可以直接在后续作业的命令里引用$AUTO_FW_FILENAME变量:
insert_job: PROCESS_FILE_JOB job_type: CMD machine: your_target_server command: /path/to/your/processing_script.sh $AUTO_FW_FILENAME condition: success(FW_MONITOR_FILES) # 仅当File Watcher作业成功触发后才运行
4. 验证参数是否正确传递
你可以在处理脚本里先添加打印语句来验证,比如processing_script.sh中加入:
echo "Received file to process: $1"
然后通过Autosys命令查看作业日志:
autorep -J PROCESS_FILE_JOB -d
在日志里就能看到打印的文件名,确认传递是否成功。
5. 额外小贴士
- 如果只需要文件名(不带完整路径),可以用shell的
basename命令处理变量,比如:command: /path/to/your/processing_script.sh $(basename $AUTO_FW_FILENAME) - 确认你的Autosys版本支持
$AUTO_FW_FILENAME变量(Autosys 11.x及以上版本都支持,旧版本可能需要升级或用其他方式); - 若监控目录文件较多,调整
watch_interval避免频繁触发,也可以结合watch_file_type等参数过滤特定类型的文件。
内容的提问来源于stack exchange,提问作者Arati2512
相关产品推荐
相关产品推荐

