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

PRTG无法显示正确值:SUSE系统更新检测脚本异常求助

解决SUSE系统中PRTG调用更新检测脚本显示天数为0的问题

可能的原因与排查思路

  • 权限与环境问题
    PRTG通常以特定用户(如prtg或root)执行脚本,需确认该用户对/var/log/zypp/history有读取权限。可以在脚本中添加调试日志,输出LASTUPDATE变量的值:

    echo "LASTUPDATE: '$LASTUPDATE'" >> /tmp/prtg_zypp_debug.log
    

    如果日志中LASTUPDATE为空,说明脚本无法读取日志文件,需调整文件权限或PRTG执行用户。

  • 日期格式与date命令兼容性
    SUSE与RedHat的date命令对某些日期格式的解析可能存在差异。先确认/var/log/zypp/history中的日期格式(例如2024-05-01 14:30:00),然后在PRTG执行环境中手动测试:

    date -d "这里替换为实际的LASTUPDATE值" +%s
    

    如果命令报错或返回空值,说明date无法解析该格式,需调整日期转换逻辑,比如使用awk提取日期字段后重新格式化。

  • 命令替换与排序逻辑问题
    旧的反引号`...`在部分shell环境下可能存在展开问题,建议替换为$()写法:

    LASTUPDATE=$(grep 'install' /var/log/zypp/history | awk -F'|' '{print $1}' | sort -r | head -n 1)
    

    同时确认sort -r能正确排序日期:如果日志中的日期格式不是字典序可排序的(如DD-MM-YYYY),sort会返回错误的最新记录,导致后续计算出错。可以手动执行这条命令,验证输出是否为最新的更新日期。

  • 添加完整调试逻辑
    修改脚本加入错误处理和详细日志,定位具体出错步骤:

    #!/bin/sh
    
    LOGFILE=/tmp/prtg_zypp_update_debug.log
    echo "--- Debug Log: $(date) ---" >> "$LOGFILE"
    
    # 获取最后一次更新日期
    LASTUPDATE=$(grep 'install' /var/log/zypp/history | awk -F'|' '{print $1}' | sort -r | head -n 1)
    echo "LASTUPDATE: '$LASTUPDATE'" >> "$LOGFILE"
    
    if [ -z "$LASTUPDATE" ]; then
        echo "1:0:Failed to get last update date" >> "$LOGFILE"
        echo "1:0:Failed to get last update date"
        exit 1
    fi
    
    # 转换为时间戳
    LASTUPDATETS=$(date -d "$LASTUPDATE" +%s 2>> "$LOGFILE")
    CURRENTTS=$(date +%s)
    echo "Timestamps - Last Update: $LASTUPDATETS, Current: $CURRENTTS" >> "$LOGFILE"
    
    if [ -z "$LASTUPDATETS" ]; then
        echo "1:0:Failed to convert date to timestamp" >> "$LOGFILE"
        echo "1:0:Failed to convert date to timestamp"
        exit 1
    fi
    
    # 计算天数差
    LASTUPDATEDAYSAGO=$(( (CURRENTTS - LASTUPDATETS) / (24 * 60 * 60) ))
    echo "Days since last update: $LASTUPDATEDAYSAGO" >> "$LOGFILE"
    
    echo "0:$LASTUPDATEDAYSAGO:$LASTUPDATEDAYSAGO Days since last zypper update"
    

    执行后查看/tmp/prtg_zypp_update_debug.log,即可明确是哪一步导致LASTUPDATEDAYSAGO为0。

  • PRTG执行环境检查
    确认PRTG使用的shell路径与本地一致:执行echo $SHELL对比本地和PRTG执行环境的shell类型。如果PRTG使用的是dash而非bash,需确保脚本语法兼容POSIX标准。同时检查脚本的完整调用路径是否正确,避免PRTG找不到脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:06:19