Ansible执行任务失败:目标机器无可用临时目录求助
Ansible任务失败:目标机器无可用临时目录
错误详情
执行Ansible任务时突然失败,报错信息如下:
changed : false module_stderr : Shared connection to 10.131.132.11 closed.\r\n module_stdout : Traceback (most recent call last):\r\n File \"/root/.ansible/tmp/ansible-tmp-1662460628.845051-105063944436404/AnsiballZ_setup.py\", line 113, in <module>\r\n try:\r\n File \"/root/.ansible/tmp/ansible-tmp-1662460628.845051-105063944436404/AnsiballZ_setup.py\", line 98, in _ansiballz_main\r\n json_params = f.read()\r\n File \"/usr/lib64/python2.7/tempfile.py\", line 321, in mkdtemp\r\n dir = gettempdir()\r\n File \"/usr/lib64/python2.7/tempfile.py\", line 265, in gettempdir\r\n tempdir = _get_default_tempdir()\r\n File \"/usr/lib64/python2.7/tempfile.py\", line 212, in _get_default_tempdir\r\n (\"No usable temporary directory found in %s\" % dirlist))\r\nIOError: [Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/root']\r\n msg : MODULE FAILURE\nSee stdout/stderr for the exact error rc : 1
核心问题是目标机器(10.131.132.11)找不到可用临时目录,系统尝试的/tmp、/var/tmp等路径均无法正常使用。
排查与修复步骤
1. 登录目标机器检查临时目录状态
- 检查目录是否存在:
ls -ld /tmp /var/tmp /usr/tmp - 检查目录权限:
确保目录对运行Ansible的用户(此处为root)有读、写、执行权限,ls -l / | grep tmp/tmp通常需设置1777权限(粘滞位)。 - 检查磁盘空间:
确认磁盘是否已满,满盘会导致无法创建临时文件。df -h - 检查挂载参数:
查看mount | grep tmp/tmp等目录是否被挂载为noexec(禁止执行)或ro(只读),这会导致Python无法创建临时执行环境。
2. 针对性修复
- 若目录不存在,创建并设置权限:
mkdir -p /tmp && chmod 1777 /tmp - 若磁盘满,清理日志、临时文件等无用数据释放空间;
- 若挂载参数异常,临时重新挂载:
如需永久生效,修改mount -o remount,rw,exec /tmp/etc/fstab中对应挂载项的参数后重新挂载。
3. Ansible临时规避方案
如果暂时无法修复目标机器,可在Ansible中指定自定义临时目录:
- 在Playbook中配置:
- name: 示例任务 hosts: 10.131.132.11 vars: ansible_tmp_dir: /root/ansible_temp tasks: - name: 创建自定义临时目录 file: path: "{{ ansible_tmp_dir }}" state: directory mode: '0700' # 后续任务... - 或在
ansible.cfg中全局设置:remote_tmp = /root/ansible_temp
内容的提问来源于stack exchange,提问作者Kona Laxman Deepak
相关产品推荐
相关产品推荐

