ansible执行任务时在被控机~/.ansible/tmp/生成临时python脚本,任务完成后应自动删除但可能残留;清理需分别处理控制节点(yum/apt缓存)和被控节点(find ~/.ansible/tmp -name "ansible-tmp-*" -mtime +1 -exec rm -rf {} +或ansible file模块批量清除)。

Ansible 执行任务时会在远程被控主机上生成临时 Python 脚本文件(通常位于 ~/.ansible/tmp/),这些文件在任务完成后本应自动删除,但有时因权限不足、进程异常中断或 SSH 连接断开等原因残留,占用磁盘空间。清理它们需分两部分处理:控制节点缓存和被控节点临时文件。
控制节点的 yum/apt 缓存清理
这不属于 Ansible 运行时产生的临时文件,但常被混淆。如果你用 yum 或 apt 安装过 Ansible 或其依赖,可按系统类型清理:
-
CentOS/RHEL 7/8:
yum clean all && yum makecache -
CentOS/RHEL 9 / Rocky/AlmaLinux:
dnf clean all && dnf makecache -
Ubuntu/Debian:
sudo apt clean && sudo apt autoclean
被控节点上的 Ansible 临时脚本文件
这些才是 Ansible 实际执行中留下的“垃圾”,路径固定为被控机上当前执行用户的家目录下:
- 默认位置:
~/.ansible/tmp/(如/home/alice/.ansible/tmp/或/root/.ansible/tmp/) - 文件名形如:
ansible-tmp-1728765432.123456-12345-123456789012345/,含时间戳和随机串 - 清理方式(登录到对应被控机执行):
find ~/.ansible/tmp -type d -name "ansible-tmp-*" -mtime +1 -exec rm -rf {} + 2>/dev/null
此命令删除 1 天前创建的临时目录(避免误删正在运行的任务)
自动化批量清理所有被控节点
用 Ansible 的 file 模块统一清理(推荐在日常维护 Playbook 中加入):
- 清理当前用户临时目录:
ansible all -m file -a "path=~/.ansible/tmp state=absent" - 若需保留
.ansible目录结构仅清空 tmp 子目录:ansible all -m file -a "path=~/.ansible/tmp/* state=absent" - 加
-b(become)支持清理/root/.ansible/tmp(当以普通用户连接但任务提权执行时)
预防临时文件堆积的小技巧
从源头减少残留概率:
- 在
ansible.cfg中设置:remote_tmp = /tmp/.ansible/tmp(改用系统/tmp,由系统自动轮转清理) - 关闭 SSH 连接复用(避免连接异常导致清理失败):
在ansible.cfg加:ssh_args = -o ControlMaster=no - 确保被控机 Python 有写入用户家目录的权限;必要时用
become执行任务











