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

如何使用Ansible实现服务器重启后自动重启未运行的服务

实现逻辑说明

你可以直接把两个独立playbook整合为单工作流执行,核心流程为:安装Windows更新→按需触发重启并等待系统完全就绪→校验指定服务状态,未运行的服务自动尝试启动。
你原有服务检查任务里的win_service模块本身就自带异常服务自动拉起能力:只要配置state: started,模块检测到目标服务不在运行状态时会自动执行启动操作,不需要额外编写状态判断分支。

完整可运行Playbook
---
- hosts: all
  gather_facts: no
  tasks:
    - name: 安装安全更新、关键更新与累积更新
      become: yes
      win_updates:
        category_names:
          - SecurityUpdates
          - CriticalUpdates
        server_selection: windows_update
        reboot: no
      register: update_install_result

    - name: 检测到待重启标记时执行服务器重启,等待系统完全就绪
      become: yes
      win_reboot:
        reboot_timeout: 1800
        post_reboot_delay: 60
      when: update_install_result.reboot_required

    - name: 校验AD核心服务运行状态,未运行服务自动启动
      become: yes
      win_service:
        name: "{{ item }}"
        start_mode: auto
        state: started
      loop:
        - NTDS
        - ADWS
        - Dfs
        - DFSR
        - DNS
        - Kdc
      register: service_status_result

    - name: 输出被调整过状态的服务信息(可选,用于排查)
      debug:
        var: service_status_result
      when: service_status_result.changed
配置注意事项
  • 不要通过固定等待时长的方式等服务器重启,win_reboot模块会持续检测WinRM管理端口连通性,确认系统可正常响应、基础服务加载完成后才会执行后续任务,可靠性远高于固定sleep,也不会浪费不必要的等待时间。
  • 上述配置里reboot_timeout设为1800秒(30分钟)是为了兼容大体积累积更新安装后的慢重启场景,可以根据自己服务器的实际性能调整数值。
  • post_reboot_delay设为60秒是为了等系统核心服务全部加载完成再做服务校验,避免出现系统刚连通但服务还没启动导致的误判。
  • 如果需要保留两个独立playbook的结构,只要在Windows更新playbook末尾加上上述的重启等待任务,再按顺序执行原有服务检查playbook即可,最终效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:19:18