#!/bin/bash # 状态监控和执行脚本 # 监控 /api/status,根据状态执行相应操作并循环 BASE_URL="http://localhost:3000" STATUS_ENDPOINT="/api/status" SETSTATUS_ENDPOINT="/api/setstatus" REPO_DIR="/Users/hokori/code/html/mirrors/linux-mirror-browser" echo "=== 状态监控脚本启动 ===" echo "监控地址: $BASE_URL$STATUS_ENDPOINT" echo "仓库目录: $REPO_DIR" echo "注意: 脚本运行时不写入日志文件" echo while true; do TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') echo "[$TIMESTAMP] 检查状态..." # 获取状态 STATUS_RESPONSE=$(curl -s "$BASE_URL$STATUS_ENDPOINT") # 解析状态值 if echo "$STATUS_RESPONSE" | grep -q '"status":1'; then echo "[$TIMESTAMP] 状态: 1 (需要更新)" # 切换到仓库目录并执行更新脚本 if [ -d "$REPO_DIR" ]; then echo "[$TIMESTAMP] 切换到目录: $REPO_DIR" cd "$REPO_DIR" || { echo "[$TIMESTAMP] 错误: 无法切换到目录 $REPO_DIR" sleep 30 continue } echo "[$TIMESTAMP] 执行更新脚本: ./update_repo.sh" if [ -f "./update_repo.sh" ]; then chmod +x ./update_repo.sh # 执行更新脚本,输出直接显示在控制台 echo "[$TIMESTAMP] ===== 更新脚本开始执行 =====" ./update_repo.sh UPDATE_RESULT=$? echo "[$TIMESTAMP] ===== 更新脚本执行结束 =====" if [ $UPDATE_RESULT -eq 0 ]; then echo "[$TIMESTAMP] 更新脚本执行成功" CURRENT_TIME=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ") echo "[$TIMESTAMP] 发送状态更新: s=ok, time=$CURRENT_TIME" # 发送状态更新 SETSTATUS_RESPONSE=$(curl -s -X POST "$BASE_URL$SETSTATUS_ENDPOINT" \ -H "Content-Type: application/json" \ -d "{\"s\": \"ok\", \"time\": \"$CURRENT_TIME\"}") echo "[$TIMESTAMP] 状态更新响应: $SETSTATUS_RESPONSE" else echo "[$TIMESTAMP] 更新脚本执行失败,退出码: $UPDATE_RESULT" fi else echo "[$TIMESTAMP] 错误: 更新脚本 ./update_repo.sh 不存在" fi else echo "[$TIMESTAMP] 错误: 仓库目录 $REPO_DIR 不存在" fi elif echo "$STATUS_RESPONSE" | grep -q '"status":0'; then echo "[$TIMESTAMP] 状态: 0 (无需更新),无事可做" else echo "[$TIMESTAMP] 错误: 无法解析状态响应" echo "[$TIMESTAMP] 响应内容: $STATUS_RESPONSE" fi echo "[$TIMESTAMP] 等待30秒..." sleep 30 echo "[$TIMESTAMP] ------------------------" done