Files
ljwx-harbor/harbor/install-nightly-cache.sh
T
bruno 435834dc79 feat: Harbor 版本化配置
- 添加 Harbor 快速恢复脚本 (harbor-quick-restore.sh)
- 添加完整恢复指南 (HARBOR-RESTORE-GUIDE.md)
- 添加版本信息文件 (VERSION.md)
- 更新 .gitignore 排除敏感数据
- 配置 harbor git remote
- 修复 Cloudflare Tunnel 配置

系统重装后可通过以下命令快速恢复:
git clone http://192.168.1.83:33000/gao/ljwx-harbor.git
cd ljwx-harbor
./harbor-quick-restore.sh
2026-02-27 08:12:30 +08:00

216 lines
5.1 KiB
Bash
Executable File

#!/bin/bash
# Harbor 凌晨缓存任务安装/卸载脚本
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_error() { echo -e "${RED}[✗]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[!]${NC} $1"; }
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLIST_SRC="${SCRIPT_DIR}/com.harbor.nightly-cache.plist"
PLIST_DEST="$HOME/Library/LaunchAgents/com.harbor.nightly-cache.plist"
LABEL="com.harbor.nightly-cache"
show_usage() {
cat << EOF
Harbor 凌晨镜像缓存任务管理脚本
用法:
$0 install - 安装并启动定时任务
$0 uninstall - 停止并卸载定时任务
$0 start - 启动定时任务
$0 stop - 停止定时任务
$0 status - 查看任务状态
$0 logs - 查看最近的日志
$0 test - 手动测试运行(不等待定时)
定时配置:
每天凌晨 2:00 / 4:00 AM 自动运行
日志位置: ${SCRIPT_DIR}/logs/
EOF
}
install_task() {
log_info "=== 安装 Harbor 凌晨缓存任务 ==="
echo ""
# 检查 plist 文件
if [[ ! -f "$PLIST_SRC" ]]; then
log_error "找不到 plist 文件: $PLIST_SRC"
exit 1
fi
# 创建 LaunchAgents 目录
mkdir -p "$HOME/Library/LaunchAgents"
# 如果已存在,先卸载
if launchctl list | grep -q "$LABEL"; then
log_warning "任务已存在,先卸载..."
launchctl unload "$PLIST_DEST" 2>/dev/null || true
fi
# 复制 plist 文件
log_info "复制配置文件..."
cp "$PLIST_SRC" "$PLIST_DEST"
log_success "配置文件已复制到: $PLIST_DEST"
# 加载任务
log_info "加载 launchd 任务..."
launchctl load "$PLIST_DEST"
log_success "任务已加载"
echo ""
log_success "✅ 安装完成!"
echo ""
echo " 任务标识: $LABEL"
echo " 运行时间: 每天凌晨 2:00 / 4:00 AM"
echo " 脚本路径: ${SCRIPT_DIR}/nightly-cache.sh"
echo " 镜像清单: ${SCRIPT_DIR}/image-manifest.txt"
echo " 日志目录: ${SCRIPT_DIR}/logs/"
echo ""
echo "查看状态: $0 status"
echo "查看日志: $0 logs"
echo "手动测试: $0 test"
}
uninstall_task() {
log_info "=== 卸载 Harbor 凌晨缓存任务 ==="
echo ""
if [[ ! -f "$PLIST_DEST" ]]; then
log_warning "任务未安装"
return
fi
# 卸载任务
log_info "卸载 launchd 任务..."
launchctl unload "$PLIST_DEST" 2>/dev/null || true
log_success "任务已卸载"
# 删除 plist 文件
log_info "删除配置文件..."
rm -f "$PLIST_DEST"
log_success "配置文件已删除"
echo ""
log_success "✅ 卸载完成!"
}
start_task() {
log_info "启动任务..."
if [[ ! -f "$PLIST_DEST" ]]; then
log_error "任务未安装,请先运行: $0 install"
exit 1
fi
launchctl load "$PLIST_DEST" 2>/dev/null || log_warning "任务可能已在运行"
log_success "任务已启动"
}
stop_task() {
log_info "停止任务..."
launchctl unload "$PLIST_DEST" 2>/dev/null || log_warning "任务可能未运行"
log_success "任务已停止"
}
show_status() {
log_info "=== 任务状态 ==="
echo ""
if launchctl list | grep -q "$LABEL"; then
echo " 状态: ✅ 运行中"
echo ""
launchctl list | grep "$LABEL"
else
echo " 状态: ❌ 未运行"
fi
echo ""
if [[ -f "$PLIST_DEST" ]]; then
echo " 配置文件: ✅ 已安装"
echo " 路径: $PLIST_DEST"
else
echo " 配置文件: ❌ 未安装"
fi
echo ""
log_info "=== 最近的日志 ==="
if [[ -f "${SCRIPT_DIR}/logs/nightly-cache-$(date '+%Y%m%d').log" ]]; then
echo " 今日日志:"
tail -10 "${SCRIPT_DIR}/logs/nightly-cache-$(date '+%Y%m%d').log" | sed 's/^/ /'
else
echo " 今日尚无日志"
fi
}
show_logs() {
log_info "=== 最近的日志文件 ==="
echo ""
ls -lht "${SCRIPT_DIR}/logs/nightly-cache-"*.log 2>/dev/null | head -5 || echo " 无日志文件"
echo ""
log_info "=== 最新日志内容 ==="
echo ""
LATEST_LOG=$(ls -t "${SCRIPT_DIR}/logs/nightly-cache-"*.log 2>/dev/null | head -1)
if [[ -n "$LATEST_LOG" ]]; then
tail -50 "$LATEST_LOG"
else
echo " 无日志内容"
fi
}
test_run() {
log_info "=== 手动测试运行 ==="
echo ""
log_warning "这将立即执行镜像缓存任务(不等待定时)"
echo ""
read -p "确认继续? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_info "已取消"
exit 0
fi
log_info "开始执行..."
"${SCRIPT_DIR}/nightly-cache.sh"
}
# 主逻辑
case "${1:-}" in
install)
install_task
;;
uninstall)
uninstall_task
;;
start)
start_task
;;
stop)
stop_task
;;
status)
show_status
;;
logs)
show_logs
;;
test)
test_run
;;
*)
show_usage
exit 1
;;
esac