跳至内容
白宦成的数字花园
用户工具
登录
站点工具
搜索
工具
显示页面
过去修订
反向链接
最近更改
媒体管理器
网站地图
登录
>
最近更改
媒体管理器
网站地图
您在这里:
start
»
homelab
您的足迹:
homelab
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== Homelab ====== ===== HomeLab IP 提醒脚本 ===== <code copy Bash [enable_line_numbers="true"]>#!/bin/bash LOG_FILE="/tmp/notify-ip.log" BARK_TITLE="北京 daheng 内网 IP 报告" BARK_GROUP="Server IP 提醒" RETRY_COUNT=0 MAX_RETRIES=60 BARK_PUSH_URL="" BARK_DEVICE_KEY="" log() { local level="$1" shift printf '%s [%s] %s\n' "$(date '+%Y-%m-%dT%H:%M:%S%z')" "$level" "$*" >> "$LOG_FILE" } MISSING_CONFIG=() if [ -z "${BARK_PUSH_URL:-}" ]; then MISSING_CONFIG+=("BARK_PUSH_URL") fi if [ -z "${BARK_DEVICE_KEY:-}" ]; then MISSING_CONFIG+=("BARK_DEVICE_KEY") fi if [ "${#MISSING_CONFIG[@]}" -gt 0 ]; then log ERROR "Missing required Bark config: ${MISSING_CONFIG[*]}" exit 1 fi if ! command -v python3 > /dev/null 2>&1; then log ERROR "python3 is required to build the Bark payload" exit 1 fi if ! command -v curl > /dev/null 2>&1; then log ERROR "curl is required to send the Bark notification" exit 1 fi log INFO "Waiting for network connectivity; max retries: ${MAX_RETRIES}" while ! ping -c 1 -W 1 8.8.8.8 > /dev/null 2>&1; do RETRY_COUNT=$((RETRY_COUNT + 1)) if [ "$RETRY_COUNT" -ge "$MAX_RETRIES" ]; then log ERROR "Network timeout after ${MAX_RETRIES} attempts, exiting" exit 1 fi if [ $((RETRY_COUNT % 10)) -eq 0 ]; then log INFO "Network still unavailable after ${RETRY_COUNT} attempts" fi sleep 1 done log INFO "Network connectivity confirmed after ${RETRY_COUNT} attempts" INTERNAL_IPS=$(ip -4 addr show | awk '/ inet / { split($2, ip, "/"); if (ip[1] !~ /^127\./) print ip[1] }') if [ -z "$INTERNAL_IPS" ]; then MESSAGE="无法获取内网 IP 地址。" else MESSAGE="主机内网 IP 地址:$(printf '%s\n' "$INTERNAL_IPS" | tr '\n' ' ')" fi JSON_PAYLOAD=$( BARK_TITLE="$BARK_TITLE" \ BARK_BODY="$MESSAGE" \ BARK_DEVICE_KEY="$BARK_DEVICE_KEY" \ BARK_GROUP="$BARK_GROUP" \ python3 - <<'PY' import json import os payload = { "title": os.environ["BARK_TITLE"], "body": os.environ["BARK_BODY"], "device_key": os.environ["BARK_DEVICE_KEY"], "group": os.environ["BARK_GROUP"], } print(json.dumps(payload, ensure_ascii=False)) PY ) RESPONSE_FILE=$(mktemp) log INFO "Sending Bark notification" HTTP_STATUS=$( curl -sS -o "$RESPONSE_FILE" -w '%{http_code}' \ -X POST "$BARK_PUSH_URL" \ -H 'Content-Type: application/json; charset=utf-8' \ --data-binary "$JSON_PAYLOAD" 2>> "$LOG_FILE" ) CURL_EXIT=$? RESPONSE_BODY=$(cat "$RESPONSE_FILE") rm -f "$RESPONSE_FILE" log INFO "Bark HTTP status: ${HTTP_STATUS:-unknown}" log INFO "Bark response body: ${RESPONSE_BODY:-<empty>}" if [ "$CURL_EXIT" -ne 0 ]; then log ERROR "Bark notification failed with curl exit code ${CURL_EXIT}" exit "$CURL_EXIT" fi case "$HTTP_STATUS" in 2*) log INFO "Bark notification sent successfully" ;; *) log ERROR "Bark notification returned non-success HTTP status: ${HTTP_STATUS:-unknown}" exit 1 ;; esac echo "Attempted to send Bark notification."</code>
/storage/data/pages/homelab.txt
· 最后更改:
2026/06/30 00:47
由
bestony
页面工具
显示页面
过去修订
反向链接
回到顶部