#!/usr/bin/env bash # # 查看证书状态;任一证书剩余有效期低于阈值时以非 0 退出,便于接入告警。 # 证书过期是静默事故,光有续签日志不够,必须有一个独立的检查点。 # set -euo pipefail export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin${PATH:+:$PATH}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" WARN_DAYS="${WARN_DAYS:-20}" cd "$SCRIPT_DIR" if ! out=$(docker compose run --rm certbot certificates 2>&1); then echo "$out" echo "获取证书信息失败" >&2 exit 1 fi echo "$out" # certbot 输出形如:Expiry Date: 2026-12-07 02:41:23+00:00 (VALID: 89 days) min="$(echo "$out" | grep -o 'VALID: [0-9]*' | awk '{print $2}' | sort -n | head -1 || true)" if [ -z "$min" ]; then echo "未能解析证书有效期" >&2 exit 1 fi if [ "$min" -lt "$WARN_DAYS" ]; then echo "警告:证书最少剩余 $min 天,低于阈值 $WARN_DAYS 天" >&2 exit 1 fi echo "证书状态正常,最少剩余 $min 天"