Rundeck崩溃/重启后运行中作业未终止的配置方法咨询
问题详情
环境信息
- 应用版本:Rundeck Community - v4.2.1(相关问题已存在较长时间)
- 数据库:PostgreSQL 9.6
问题表现
当Rundeck进程崩溃或所在服务器宕机时,崩溃前处于执行状态的作业会一直保持RUNNING状态,进入对应执行详情页会显示如下提示:
"Workflow State and Log Output is not available."
业务影响
处于异常运行状态的执行记录会阻塞后续作业调度执行,且无法触发对应告警。
核心疑问
是否存在相关配置项,可在Rundeck服务崩溃或重启时,强制将所有处于RUNNING状态的作业标记为失败?
解答
Rundeck社区版没有提供服务崩溃/重启后自动标记残留RUNNING状态作业为失败的内置配置项,可通过以下方案实现对应需求:
- 启动前置自动清理
编写数据库清理脚本,配置为Rundeck服务的启动前置执行逻辑,在服务进程启动前连接PostgreSQL完成残留记录清理,核心逻辑分两步:- 筛选所有启动时间早于本次Rundeck服务启动时间、状态仍为
RUNNING的执行记录 - 将筛选出的记录统一更新为
FAILED状态,补充标记为系统自动清理的异常终止记录
核心参考SQL如下:
注意:执行SQL操作前务必备份-- 执行更新前先查询待清理记录确认范围 SELECT id, project, job_id, date_started FROM execution WHERE status = 'RUNNING' AND date_started < (SELECT start_time FROM sys_info LIMIT 1); -- 批量更新残留记录为失败状态 UPDATE execution SET status = 'FAILED', date_completed = NOW(), aborted_by = 'system-auto-clean' WHERE status = 'RUNNING' AND date_started < (SELECT start_time FROM sys_info LIMIT 1);execution表数据,避免误改造成数据丢失。如果是多节点集群部署,需要结合execution表的server_nodeuuid字段匹配已离线节点ID,仅清理离线节点上的残留执行,避免误标记其他正常节点上正在运行的作业。 - 筛选所有启动时间早于本次Rundeck服务启动时间、状态仍为
- 作业层防阻塞配置
对核心作业单独配置执行超时阈值,超过指定时长未完成的作业会被自动终止并标记为失败;同时打开作业并发控制规则,避免单条卡住的执行永久阻塞后续调度。 - 定时巡检兜底
配置固定周期的巡检任务,扫描所有运行时长超过合理阈值(通常为作业配置超时时间的2倍)的RUNNING状态执行,自动标记为失败并触发告警,覆盖进程假死、脚本挂死等非宕机场景的异常卡住问题。
内容的提问来源于stack exchange,提问作者Padraig Lennon
相关产品推荐
相关产品推荐

