6.5. 使用设备生命周期 hook


Red Hat Edge Manager 代理可以使用设备生命周期 hook 在设备生命周期的特定点运行用户定义的命令。例如,您可以在操作系统镜像中添加 shell 脚本,以备份应用程序数据。然后,您可以指定该脚本必须成功运行并成功完成,然后才能代理开始更新操作系统。

另外,当磁盘上的文件发生变化时,某些应用程序或系统服务不会自动重新载入其配置文件。您可以将命令指定为另一个 hook (在代理完成更新过程后调用)来手动重新载入配置文件。

支持以下设备生命周期 hook:

Expand
生命周期 Hook描述

beforeUpdating

在代理准备更新并在实际更改系统之前,会调用此 hook。如果此 hook 中的操作返回失败,代理会取消更新。

afterUpdating

代理将更新写入到磁盘后,会调用此 hook。如果此 hook 中的操作返回失败,代理会取消并回滚更新。

beforeRebooting

在系统重启前会调用此 hook。代理会阻止重启,直到运行操作完成或超时为止。如果此 hook 中的任何操作返回失败,代理会取消并回滚更新。

afterRebooting

当代理重启后首先启动时,会调用此 hook。如果此 hook 中的任何操作返回失败,代理会报告这个信息,但将继续启动。

6.5.1. 规则文件

您可以通过在设备文件系统中的以下位置之一中添加规则文件来定义设备生命周期 hook:

  • /usr/lib/flightctl/hooks.d/<lifecycle_hook_name&gt;/ drop-in 目录中的规则是只读的。要向 /usr 目录添加规则,您必须在镜像构建过程中将它们添加到操作系统镜像中。
  • /etc/flightctl/hooks.d/<lifecycle_hook_name>/ drop-in 目录中的规则是 read-writable。您可以使用多种方法在运行时更新规则。

在创建并放置文件时,您必须考虑以下实践:

  • 规则的名称必须是所有小写。
  • 如果您在两个位置定义了规则,则规则将合并。
  • 如果您在生命周期 hook 目录中添加多个规则文件,则会按照文件名的字典顺序处理这些文件。
  • 如果您在两个位置定义了具有相同文件名的文件,/etc 文件夹中的文件优先于 /usr 文件夹中同名的文件。

规则文件以 YAML 格式编写,具有一个或多个操作的列表。操作可以是运行外部命令的指令。

当您为 hook 指定很多操作时,会按顺序执行操作,然后再开始下一个操作。

如果某个操作返回失败,则会跳过以下操作。

run 操作采用以下参数:

Expand

参数

描述

运行

要运行的命令的绝对路径,后跟任何标志或参数,如 /usr/bin/nmcli 连接重新加载。命令不会在 shell 中执行,因此您无法使用 shell 变量,如 $PATH$HOME,或链命令,如 |;。如果需要,您可以通过将 shell 指定为要运行的命令来启动 shell,例如 /usr/bin/bash -c 'echo $SHELL $HOME $USER'

EnvVars

可选。键值对列表,以设置为命令的环境变量。

WORKDIR

可选。命令从其中运行该命令的目录。

Timeout(超时)

可选。允许操作完成的最长时间。将持续时间指定为单个正整数,后跟一个时间单位。支持 smh 单元(秒、分钟和小时)。

如果

可选。运行该操作需要满足的条件列表。如果没有提供,则操作将无条件地运行。

默认情况下,系统会在每次触发 hook 时执行操作。但是,对于在更新 hook 后,您可以使用 If 参数添加执行某个操作必须满足 true 的条件。否则,会跳过该操作。

例如,只有在更新期间给定文件或目录更改时才会运行操作,您可以定义采用以下参数的路径条件:

Expand

参数

描述

作业类型

到必须在更新期间更改的文件或目录的绝对路径,作为要执行的操作的条件。使用正斜杠(/)指定路径:

  • 如果路径指向某个目录,它必须以正斜杠(/)结尾。
  • 如果指定了到文件的路径,则该文件必须已更改为满足条件
  • 如果您指定了目录的路径,则该目录或任何子目录中的文件必须已更改为满足条件

op

文件操作列表,如创建更新和删除 的,以限制执行该操作的条件对指定路径的更改。

如果您在 更新 hook 后 为操作指定路径条件,您可以在命令的参数中包含以下变量,并替换为更改文件的绝对路径:

Expand

变量

描述

${ Path }

路径条件中指定的文件或目录的绝对路径。

${ files }

在更新过程中更改的文件的空格分隔列表,由路径条件涵盖。

${ CreatedFiles }

在更新期间创建的文件的空格分隔列表,由路径条件涵盖。

${ UpdatedFiles }

在更新过程中更新的文件的绝对路径以空格分隔,由路径条件涵盖。

${ RemovedFiles }

在更新过程中删除的文件的空格分隔列表,由路径条件涵盖。

Red Hat Edge Manager 代理包含 /usr/lib/flightctl/hooks.d/afterupdating/00-default.yaml 中定义的一组内置规则。如果更改了某些文件,则执行以下命令:

Expand

File

命令

描述

/etc/systemd/system/

systemctl daemon-reload

通过向 systemd 守护进程重新载入 systemd 管理器配置激活对 systemd 单元的更改。这会重新运行所有生成器,重新载入所有单元文件,并重新创建整个依赖项树。

/etc/NetworkManager/system-connections/

nmcli conn reload

NetworkManager 系统连接的更改是通过向 NetworkManager 守护进程重新加载所有连接激活的。如需更多信息,请参阅附加资源部分

/etc/firewalld/

firewall-cmd --reload

firewalld 的永久配置的更改是通过信号 firewalld 以重新加载防火墙规则作为新的运行时配置来激活。

其他资源

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部