#!/bin/bash set -euo pipefail # 严格模式:错误立即退出,未定义变量报错,管道失败触发退出 # -------------------------- 颜色常量(美化输出) -------------------------- RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # 重置颜色 # -------------------------- 核心配置(可按需修改) -------------------------- # 工作目录(执行Python脚本的目录) WORK_DIR="/root/projects/stock/" # 日期配置文件路径(读取默认begin日期) DATE_FILE="./cron/reports_curr.txt" # DB环境变量值 DB_ENV="nas" # Python脚本模块路径 PY_MODULE="src.em_reports.fetch" # -------------------------- 日期处理工具函数 -------------------------- # 验证日期格式是否为 YYYY-MM-DD validate_date() { local date_str="$1" # 使用date命令验证,无效则返回非0 if date -d "$date_str" "+%Y-%m-%d" >/dev/null 2>&1; then return 0 else return 1 fi } # 计算日期差值(如 end_date - N天),输出 YYYY-MM-DD 格式 calc_date_diff() { local base_date="$1" local days="$2" date -d "$base_date - $days days" "+%Y-%m-%d" } # -------------------------- 主逻辑:确定begin/end日期 -------------------------- # Step 1: 设置end日期(固定为当前日期) END_DATE=$(date "+%Y-%m-%d") echo -e "${BLUE}📅 自动获取end日期:$END_DATE${NC}" # Step 2: 处理begin日期(优先级:命令行参数 > u3c3.txt > end-7天) BEGIN_DATE="" # 检查是否传入命令行参数(第一个参数) if [[ $# -ge 1 && -n "$1" ]]; then if validate_date "$1"; then BEGIN_DATE="$1" echo -e "${GREEN}✅ 从命令行获取begin日期:$BEGIN_DATE${NC}" else echo -e "${RED}❌ 命令行传入的日期 '$1' 格式无效(需为YYYY-MM-DD),尝试读取配置文件...${NC}" fi fi # Step 3: 若命令行参数无效/未传入,读取u3c3.txt if [[ -z "$BEGIN_DATE" ]]; then if [[ -f "$DATE_FILE" ]]; then # 读取文件内容(去除空白字符/换行) FILE_DATE=$(cat "$DATE_FILE" | tr -d ' \n\r\t') if validate_date "$FILE_DATE"; then BEGIN_DATE="$FILE_DATE" echo -e "${GREEN}✅ 从$DATE_FILE读取begin日期:$BEGIN_DATE${NC}" else echo -e "${YELLOW}⚠️ $DATE_FILE中的日期 '$FILE_DATE' 格式无效,使用默认值...${NC}" fi else echo -e "${YELLOW}⚠️ 未找到$DATE_FILE文件,使用默认值...${NC}" fi fi # Step 4: 若以上都无,使用end-7天作为默认值 if [[ -z "$BEGIN_DATE" ]]; then BEGIN_DATE=$(calc_date_diff "$END_DATE" 7) echo -e "${GREEN}✅ 使用默认begin日期(end-7天):$BEGIN_DATE${NC}" fi # -------------------------- 执行Python脚本 -------------------------- echo -e "\n${BLUE}🚀 开始执行em_reports脚本...${NC}" echo -e "🔍 执行参数:begin=$BEGIN_DATE, end=$END_DATE${NC}" echo -e "=====================================${NC}" # 进入工作目录 cd "$WORK_DIR" || { echo -e "${RED}❌ 进入工作目录失败:$WORK_DIR${NC}" exit 1 } # 执行第一个命令:mode=fetch echo -e "\n${BLUE}👉 执行模式:fetch${NC}" export DB_ENV="$DB_ENV" && python3 -m "$PY_MODULE" --begin="$BEGIN_DATE" --end="$END_DATE" --mode=fetch if [[ $? -ne 0 ]]; then echo -e "${RED}❌ mode=fetch 执行失败!终止脚本${NC}" exit 1 fi echo -e "${GREEN}✅ mode=fetch 执行成功${NC}" # 执行第二个命令:mode=down echo -e "\n${BLUE}👉 执行模式:down${NC}" export DB_ENV="$DB_ENV" && python3 -m "$PY_MODULE" --begin="$BEGIN_DATE" --end="$END_DATE" --mode=down if [[ $? -ne 0 ]]; then echo -e "${RED}❌ mode=down 执行失败!${NC}" exit 1 fi echo -e "${GREEN}✅ mode=down 执行成功${NC}" # -------------------------- 执行完成处理 -------------------------- echo -e "\n${GREEN}🎉 所有脚本执行完成!${NC}" # 可选:将本次begin日期写入u3c3.txt,供下次复用 echo "$BEGIN_DATE" > "$DATE_FILE" echo -e "${GREEN}✅ 已将begin日期 $BEGIN_DATE 写入$DATE_FILE${NC}"