modify scripts

This commit is contained in:
2026-01-09 11:25:03 +08:00
parent 80fea29fb5
commit 4f15b4b1ea
2 changed files with 118 additions and 0 deletions

6
cron/cmd.md Normal file
View File

@ -0,0 +1,6 @@
# 拉取 研报
```Bash
cd /root/projects/stock/
export DB_ENV=nas && python3 -m src.em_reports.fetch --begin=2025-12-06 --end=2025-12-15 --mode=fetch
export DB_ENV=nas && python3 -m src.em_reports.fetch --begin=2025-12-06 --end=2025-12-15 --mode=down
```

112
cron/em_reports.sh Normal file
View File

@ -0,0 +1,112 @@
#!/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}"