You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible执行异步shell脚本重命名网卡遇连接重置及异步任务疑问

问题根源

你遇到的两个核心问题分别是异步任务执行时SSH会话挂断导致进程被杀,以及网卡重命名后任务缓存自动清理导致找不到任务,具体原因和解决方案如下:

1. 为什么前两个版本的异步任务会挂起

Ansible默认的异步任务即使设置了async: 0+poll:0,底层启动的进程仍然绑定在当前SSH会话的pty下,一旦SSH会话因为网卡断开终止,会话发出的SIGHUP信号会直接杀掉正在运行的shell脚本,所以才会执行到ip link set down就停止运行。
你后续用括号包裹命令加&放到后台的写法是正确的,相当于手动给进程做了脱离会话处理,进程不会随SSH会话挂断被杀死,所以能跑完整个重命名流程。

2. 为什么清理异步缓存会报错

这个报错属于该场景下的正常现象:你设置的async:90,而整个网卡重命名+SSH重启的流程只需要20秒左右,任务执行完成后Ansible的异步进程会自动清理~/.ansible_async/目录下的缓存文件,等你15秒延迟后重连到节点调用async_status时,缓存文件已经被删除,自然会提示找不到任务。
如果确实要走清理流程,只需要给async_status任务加ignore_errors: yes即可,缓存存在就清理,不存在也不影响实际运行效果。

3. 该场景下的最优异步任务写法

如果不需要追踪异步任务的执行结果,可以直接去掉async和poll参数,用nohup手动后台运行的写法更简单,没有额外复杂度:

- name: Hot Rename Main Iface
  become: true
  shell:
    cmd: |
        nohup bash -c '
          sleep 5
          ip link set oldiface down
          ip link set oldiface name newiface
          ip link set newiface up
          nmcli networking off
          sleep 1
          nmcli networking on
          sleep 5
          systemctl restart sshd
        ' > /dev/null 2>&1 &

- name: Wait For Reconnection
  wait_for_connection:
    delay: 15
    timeout: 180

内容的提问来源于stack exchange,提问作者Cilyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:18:03