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

如何在未编辑GRUB文件时避免Salt执行系统重启操作?

问题:仅在GRUB配置修改后执行update-grub和系统重启

我需要通过Salt将指定内核参数写入/etc/default/grub,仅当文件被成功修改时,才执行update-grub并重启Minion;如果文件未变更,则跳过更新和重启。

当前使用的SLS配置如下:

edit_grub_config:
  file.replace:
    - name: /etc/default/grub
    - pattern: '^(GRUB_CMD_LINUX_DEFAULT="[^"]*)(")'
    - repl: '\1 spectre_v2=on spec_store_bypass_disable=on tsx=off tsx_async_abort=full,nosmt mds=full,nosmt l1tf=full,force nosmt=force kvm.nx_huge_pages=force\2'
    - unless: grep -q "spectre_v2=on spec_store_bypass_disable=on tsx=off tsx_async_abort=full,nosmt mds=full,nosmt l1tf=full,force nosmt=force kvm.nx_huge_pages=force" /etc/default/grub

grub_update:
  cmd.run:
    - name: update-grub
    - require:
      - file: edit_grub_config

restart_minion:
  cmd.run:
    - name: shutdown -r now
    - require:
      - cmd: grub_update

当前问题:edit_grub_config不会重复添加参数,但每次执行都会触发系统重启,不符合仅在文件修改后才重启的需求。


解决方案

核心问题是require仅确保依赖项执行过,不关心依赖项是否实际修改了文件。Salt的onchanges机制可以实现"仅当依赖资源发生变更时才执行当前状态"的逻辑。

修改步骤

  • 给grub_update添加onchanges关联edit_grub_config,只有当/etc/default/grub被修改时才执行update-grub
  • 给restart_minion添加onchanges关联grub_update,确保只有GRUB配置更新完成后才重启

修改后的完整SLS配置

edit_grub_config:
  file.replace:
    - name: /etc/default/grub
    - pattern: '^(GRUB_CMD_LINUX_DEFAULT="[^"]*")'
    - repl: '\1 spectre_v2=on spec_store_bypass_disable=on tsx=off tsx_async_abort=full,nosmt mds=full,nosmt l1tf=full,force nosmt=force kvm.nx_huge_pages=force'
    - unless: grep -q "spectre_v2=on spec_store_bypass_disable=on tsx=off tsx_async_abort=full,nosmt mds=full,nosmt l1tf=full,force nosmt=force kvm.nx_huge_pages=force" /etc/default/grub

grub_update:
  cmd.run:
    - name: update-grub
    - onchanges:
      - file: edit_grub_config

restart_minion:
  cmd.run:
    - name: shutdown -r now
    - onchanges:
      - cmd: grub_update

额外说明

  • onchanges会检查依赖资源的状态是否为"changed",仅当依赖项实际修改系统状态时才执行当前操作
  • 也可以将restart_minion的onchanges直接指向file: edit_grub_config,效果一致,可减少一层依赖检查
  • 配置中已将转义的"替换为实际双引号",避免解析异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:37:28