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

如何使用Ohai提取各主机内核版本、补丁日期并输出至日志文件

使用Ohai提取主机内核信息的方法

一、提取内核版本与补丁日期并追加到日志文件

Ohai默认输出JSON格式的系统属性,可结合命令行工具过滤所需字段,按指定格式写入日志。

单台主机操作步骤

  1. 确保主机已安装Ohai(可通过gem install ohai或Chef客户端自带)
  2. 执行以下命令提取信息并追加到日志:
# 提取主机名、内核版本、补丁日期
HOSTNAME=$(ohai hostname)
KERNEL_RELEASE=$(ohai kernel.release)
# 从kernel.version字段中提取补丁日期(适配多数Linux发行版)
PATCH_DATE=$(ohai kernel.version | grep -oE '[A-Z][a-z]{2} [0-9]{1,2} [0-9:]{8} [0-9]{4}')

# 按指定格式追加到日志文件
echo "$HOSTNAME:kernalpatch:$PATCH_DATE" >> /var/log/kernel_patch_record.log

批量主机自动化(Chef Recipe示例)

如果通过Chef管理集群,可编写Recipe自动在所有节点执行:

# 确保日志文件存在
file '/var/log/kernel_patch_record.log' do
  owner 'root'
  group 'root'
  mode '0644'
  action :create_if_missing
end

# 执行信息提取与日志追加
execute 'log_kernel_patch_details' do
  command <<-EOF
    HOSTNAME=$(ohai hostname)
    KERNEL_RELEASE=$(ohai kernel.release)
    PATCH_DATE=$(ohai kernel.version | grep -oE '[A-Z][a-z]{2} [0-9]{1,2} [0-9:]{8} [0-9]{4}')
    echo "$HOSTNAME:kernalpatch:$PATCH_DATE" >> /var/log/kernel_patch_record.log
  EOF
  # 避免重复写入同一主机的信息
  not_if "grep -q \"#{node['hostname']}:kernalpatch:\" /var/log/kernel_patch_record.log"
end

二、提取内核版本与安装日期

Ohai本身没有直接存储内核安装日期,但可以结合系统包管理器或Ohai的packages属性查询:

针对Debian/Ubuntu系列

# 提取内核包名
KERNEL_PKG=$(dpkg -l | grep linux-image-$(ohai kernel.release) | awk '{print $2}')
# 获取安装日期
INSTALL_DATE=$(dpkg -s $KERNEL_PKG | grep 'Installed-Since' | awk -F': ' '{print $2}')

# 输出格式化结果
echo "$(ohai hostname):kernelversion:$(ohai kernel.release):installdate:$INSTALL_DATE"

针对RHEL/CentOS系列

# 提取内核包名
KERNEL_PKG=$(rpm -q kernel-$(ohai kernel.release))
# 获取安装日期
INSTALL_DATE=$(rpm -qi $KERNEL_PKG | grep 'Install Date' | awk -F': ' '{print $2}')

# 输出格式化结果
echo "$(ohai hostname):kernelversion:$(ohai kernel.release):installdate:$INSTALL_DATE"

通用Ohai包属性查询(适配支持的系统)

利用Ohai的packages节点直接查询内核包的安装时间:

ohai packages | jq ".[] | select(.name | test(\"linux-image|kernel\")) | select(.version == \"$(ohai kernel.release)\") | .install_time"

注意事项

  • 不同Linux发行版的内核字段、包命名规则存在差异,需根据实际环境调整命令
  • 若主机未安装jq,可通过apt install jq或yum install jq安装
  • 批量操作时优先使用Chef等自动化工具,减少手动操作成本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:10:06