- 添加 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
216 lines
5.1 KiB
Bash
Executable File
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
|