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

NRPE远程调用check_apt与本地执行结果不一致求助

NRPE远程调用check_apt结果与本地执行不一致的问题

我查过同主题的帖子,但没解决当前问题。我在亚马逊云搭建了Nagios 4服务器,用来监控三个地点的系统。现在正在配置新主机devbox通过NRPE被监控,配置和之前十几台已完成的主机类似,但远程调用check_apt的结果和本地执行的结果完全不一样。

devbox上的NRPE配置

command[check_apt]=/usr/lib/nagios/plugins/check_apt

本地执行check_apt的结果(普通用户或root执行结果一致)

$ sudo /usr/lib/nagios/plugins/check_apt
APT OK: 0 packages available for upgrade (0 critical updates). |available_upgrades=0;;;0 critical_updates=0;;;0

Nagios服务器端的监控配置

define host {
    use                     linux-server
    host_name               devbox
    alias                   DevBox
    address                 192.168.0.30
    _PORT                   5666
    check_command           check_ping
    notifications_enabled   1
    notification_period     24x7
    notification_options    d,u,r
    contact_groups          alert
}
define service {
    use                     generic-service
    host_name               devbox
    service_description     APT Updates
    check_command           check_nrpe_lto!check_apt
}

从Nagios服务器远程调用check_apt的结果

$ /usr/lib/nagios/plugins/check_nrpe -H 192.168.0.30 -t 30 -c check_apt
APT WARNING: 13 packages available for upgrade (0 critical updates). |available_upgrades=13;;;0 critical_updates=0;;;0

排查与解决办法

  1. NRPE用户的APT缓存未更新
    NRPE默认以nagios用户运行,你本地执行时用了sudo,但nagios用户的APT缓存可能是旧的。先切换到nagios用户验证:
su - nagios -s /bin/bash
# 手动更新缓存(若需权限先配置sudo)
sudo apt-get update
# 再执行check_apt
/usr/lib/nagios/plugins/check_apt

如果执行后结果和远程调用一致,说明是缓存问题。可以修改NRPE的check_apt命令,让它先更新缓存再检查:

command[check_apt]=/usr/bin/sudo /usr/lib/nagios/plugins/check_apt

然后在/etc/sudoers里添加nagios用户免密权限:

nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/check_apt, /usr/bin/apt-get update
  1. 检查用户环境下的APT源差异
    nagios用户和root用户的APT源配置可能不同,执行以下命令对比:
# 查看nagios用户的源配置
su - nagios -s /bin/bash
cat /etc/apt/sources.list /etc/apt/sources.list.d/*.list

# 查看root用户的源配置
cat /etc/apt/sources.list /etc/apt/sources.list.d/*.list

如果有差异,统一配置即可。

  1. NRPE环境变量限制
    NRPE运行时可能会限制环境变量,导致check_apt无法正常读取APT状态。在NRPE配置文件中添加环境变量设置:
env[PATH]=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

然后重启NRPE服务:

systemctl restart nrpe

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:55:22