Rundeck通过SSH执行任务时部分任务持续处于运行状态问题求助
Rundeck SSH执行器在Windows节点任务挂起问题排查与解决
可能的问题原因
- OpenSSH版本与Windows 2012R2兼容性缺陷:Windows 2012R2对OpenSSH 8.x系列的进程信号转发支持不完善,导致Rundeck无法正确感知任务进程的终止状态。
- Rundeck SSH信号传递机制失效:Rundeck通过SSH发送的终止信号(如SIGTERM)未被Windows OpenSSH正确转发到任务子进程,使得子进程成为孤儿进程,Rundeck持续判定任务处于运行状态。
- 节点资源瓶颈:Windows节点CPU、内存占用过高时,OpenSSH服务进程无法及时响应Rundeck的状态查询请求,导致任务状态更新延迟或错误。
- SSH会话超时配置不合理:Rundeck或OpenSSH的会话超时设置过长,任务结束后SSH会话未及时关闭,Rundeck误判任务仍在运行。
解决办法
- 调整Windows OpenSSH配置:
编辑节点上的sshd_config文件,添加/修改以下配置:
重启OpenSSH服务,确保会话超时后自动关闭,同时允许传递Rundeck的环境变量。ClientAliveInterval 30 ClientAliveCountMax 3 PermitUserEnvironment yes - 升级Rundeck至最新稳定版:
Rundeck 4.1及后续版本针对Windows SSH执行器的进程管理逻辑做了优化,修复了部分信号传递相关的bug。 - 优化任务执行脚本:
在Windows任务脚本末尾添加明确的退出指令(如exit 0),避免脚本出现无限循环或阻塞IO的操作;对于长时间运行的任务,增加定期输出的逻辑,保持SSH会话活跃。 - 调整Rundeck SSH执行器参数:
在节点配置中设置ssh-connection-timeout=30000(30秒),并启用ssh-usepty=true选项,确保PTY会话能正确传递终止信号。 - 降级OpenSSH版本:
尝试使用Windows官方推荐的OpenSSH 7.9p1版本,该版本与Windows 2012R2兼容性更好,减少进程挂起的概率。
内容的提问来源于stack exchange,提问作者Alor Broker
相关产品推荐
相关产品推荐

