Rundeck通过WinRM执行Windows删除任务始终返回成功问题求助
问题根本原因
- Windows 批处理内置的
del命令存在特殊行为:当目标文件不存在删除失败时,仅输出错误日志但不会返回非0的退出码,你现有脚本末尾的EXIT默认返回0值,Rundeck依赖命令返回的退出码判断执行结果,收到0就会判定任务执行成功。 - 而Linux下
rm命令删除不存在的文件时会主动返回非0退出码,所以Rundeck可以正确识别失败状态。
修复方案
1. 修改批处理脚本,主动捕获异常返回非0退出码
替换你现有的RundeckDeleteFile.bat内容如下:
:: Rundeck delete file @ECHO OFF SET TARGET_FILE=C:\users\winrmuser\Documents\CreateFile_%1.log :: 判断目标文件是否存在 IF EXIST %TARGET_FILE% ( DEL %TARGET_FILE% :: 二次校验是否删除成功 IF EXIST %TARGET_FILE% ( ECHO Delete failed: %TARGET_FILE% cannot be removed EXIT /B 1 ) ECHO Delete success: %TARGET_FILE% removed EXIT /B 0 ) ELSE ( ECHO Delete failed: %TARGET_FILE% does not exist EXIT /B 1 )
其中EXIT /B 1会主动向调用方返回非0退出码,Rundeck的WinRM插件收到该值后就会判定任务执行失败。
2. 可选:添加日志过滤规则兜底
如果需要覆盖更多未预判的异常场景,可以在Rundeck任务配置中添加日志失败匹配规则:
- 编辑对应任务 -> 进入命令配置页 -> 点击「Add Log Filter」
- 选择类型为「Fail Output Regex」,正则规则填入
Could Not Find|Delete failed - 保存配置后,只要任务输出日志中匹配到上述关键字,Rundeck会直接判定任务失败,和退出码判断形成双重校验。
内容的提问来源于stack exchange,提问作者SysadminAgi
相关产品推荐
相关产品推荐

