收起左侧

ups 接入群晖 网路ups 服务器

0
回复
18
查看
[ 复制链接 ]

1

主题

2

回帖

0

牛值

江湖小虾

#!/usr/bin/env bash
set -euo pipefail

# NUT / Synology UPS status probe.
# Defaults assume a Synology network UPS server on port 3493.

UPS_HOST="${UPS_HOST:-192.168.100.5}"
UPS_PORT="${UPS_PORT:-3493}"
UPS_NAME="${UPS_NAME:-ups}"
UPS_USER="${UPS_USER:-}"
UPS_PASS="${UPS_PASS:-}"
CONNECT_TIMEOUT="${CONNECT_TIMEOUT:-3}"

ts() {
  date +"%Y-%m-%d %H:%M:%S"
}

ok() {
  printf '[%s] OK %s\n' "$(ts)" "$*"
}

warn() {
  printf '[%s] WARN %s\n' "$(ts)" "$*" >&2
}

fail() {
  printf '[%s] FAIL %s\n' "$(ts)" "$*" >&2
  exit 1
}

check_port() {
  if nc -z -w "$CONNECT_TIMEOUT" "$UPS_HOST" "$UPS_PORT" >/dev/null 2>&1; then
    ok "TCP $UPS_HOST:$UPS_PORT reachable"
  else
    fail "TCP $UPS_HOST:$UPS_PORT unreachable"
  fi
}

check_upsc() {
  if ! command -v upsc >/dev/null 2>&1; then
    warn "upsc not installed, skipped UPS variable query"
    return 0
  fi

  local target
  target="$UPS_NAME@$UPS_HOST"
  if [[ -n "$UPS_PORT" ]]; then
    target="$target:$UPS_PORT"
  fi

  local out
  if [[ -n "$UPS_USER" || -n "$UPS_PASS" ]]; then
    out="$(upsc -u "$UPS_USER" -p "$UPS_PASS" "$target" ups.status 2>&1 || true)"
  else
    out="$(upsc "$target" ups.status 2>&1 || true)"
  fi

  if [[ -z "$out" ]]; then
    fail "upsc returned empty output"
  fi

  if [[ "$out" == *"Error:"* || "$out" == *"Connection failed"* || "$out" == *"Unknown UPS"* ]]; then
    fail "upsc query failed: $out"
  fi

  ok "UPS status: $out"
}

main() {
  check_port
  check_upsc
}

main "$@"


收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则