#!/usr/bin/env bash set -euo pipefail MAINTENANCE_FILE="${GENARRATIVE_MAINTENANCE_FILE:-/var/lib/genarrative/maintenance/enabled}" MAINTENANCE_PAGE_FILE="${GENARRATIVE_MAINTENANCE_PAGE_FILE:-/var/lib/genarrative/maintenance/page.html}" PAGE_SOURCE="" REASON_PARTS=() while [[ $# -gt 0 ]]; do case "$1" in --page-file) PAGE_SOURCE="${2:?缺少 --page-file 的值}" shift 2 ;; -h|--help) echo "用法: $0 [--page-file <临时公告 HTML>] [维护原因]" exit 0 ;; --*) echo "[maintenance] 未知参数: $1" >&2 exit 1 ;; *) REASON_PARTS+=("$1") shift ;; esac done REASON="${REASON_PARTS[*]:-manual}" if [[ -n "${PAGE_SOURCE}" && ( ! -f "${PAGE_SOURCE}" || ! -s "${PAGE_SOURCE}" ) ]]; then echo "[maintenance] 临时公告页不存在或为空: ${PAGE_SOURCE}" >&2 exit 1 fi mkdir -p "$(dirname "${MAINTENANCE_FILE}")" "$(dirname "${MAINTENANCE_PAGE_FILE}")" if [[ -n "${PAGE_SOURCE}" ]]; then page_temp="$(mktemp "${MAINTENANCE_PAGE_FILE}.tmp.XXXXXX")" trap 'rm -f "${page_temp:-}" "${marker_temp:-}"' EXIT install -m 0644 -- "${PAGE_SOURCE}" "${page_temp}" mv -fT -- "${page_temp}" "${MAINTENANCE_PAGE_FILE}" page_temp="" echo "[maintenance] 已安装本次运行态公告页: ${MAINTENANCE_PAGE_FILE}" elif [[ ! -f "${MAINTENANCE_FILE}" && ( -e "${MAINTENANCE_PAGE_FILE}" || -L "${MAINTENANCE_PAGE_FILE}" ) ]]; then rm -f -- "${MAINTENANCE_PAGE_FILE}" fi marker_temp="$(mktemp "${MAINTENANCE_FILE}.tmp.XXXXXX")" { printf "enabled_at=%s\n" "$(date -u +%Y-%m-%dT%H:%M:%SZ)" printf "reason=%s\n" "${REASON}" } >"${marker_temp}" chmod 0644 "${marker_temp}" mv -fT -- "${marker_temp}" "${MAINTENANCE_FILE}" marker_temp="" trap - EXIT echo "[maintenance] 已进入维护模式: ${MAINTENANCE_FILE}"