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

基于New Relic NRI Flex实现多用户密码过期告警遇脚本语法问题

解决New Relic多用户密码过期监控脚本语法错误

原脚本的核心语法问题

你给出的shell脚本有两个致命语法错误:

  1. for user in tomcat fuse wpms oracle do 里,do前面必须加分号或者换行,shell语法要求循环列表和do之间必须有明确分隔符
  2. 提取的密码过期日期带前后空格,未做清理会导致后续date命令解析失败

修正后的可运行脚本

for user in tomcat fuse wpms oracle; do
    todaydat=$(date +%s)
    # 提取密码过期日期并去除前后空格
    passexpdate=$(chage -l "$user" | grep "Password expires" | awk -F':' '{print $2}' | xargs)
    
    # 处理密码永不过期的特殊场景
    if [ "$passexpdate" = "never" ]; then
        expday=-1
        passexp=0
    else
        passexp=$(date -d "$passexpdate" +%s)
        exp=$((passexp - todaydat))
        expday=$((exp / 86400))
    fi
    
    # 输出New Relic可直接解析的指标格式
    echo "password_expiry_days,user=$user value=$expday"
done

适配New Relic的关键优化

  • 用$()替代反引号,语法更清晰且支持嵌套,避免shell解析歧义
  • 给变量加双引号,防止用户名称带特殊字符时出错
  • 增加xargs清理过期日期的前后空格,避免date命令报错
  • 新增永不过期场景的处理,防止脚本中断
  • 输出采用New Relic兼容的行协议格式,方便YAML配置中直接采集指标,无需额外处理

YAML配置补充提示

确保New Relic集成用户有执行chage -l的权限,可通过sudoers配置免密执行:

newrelic ALL=(ALL) NOPASSWD: /usr/bin/chage -l *

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:52:12