Files
BeacherZ 2c61b727cb feat: 项目改名为 dailycheckin-plus,README 补 docker run 用法,通知标题带项目名
- 品牌字串全面更换:README / compose / Dockerfile / entrypoint / 面板页面 / CI。
  镜像名变为 ghcr.io/beacherz/dailycheckin-plus:latest;compose 里的服务名与
  container_name 保持 dailycheckin 不动 —— 改了会变成新旧两个容器同时跑,通知收两条。
- 通知标题带上项目名:NOTICE_TITLE 与 main.py 的标题都改用 PROJECT_NAME,
  实际发出来是「【dailycheckin-plus 每日签到 · 日期】」;企业微信卡片署名同步。
  这两处仍在 patches/0002 里,已重新生成并验证「重放后与工作区逐字节一致」。
- 面板:默认 PANEL_TITLE 改为 dailycheckin-plus,浏览器标签页与顶栏品牌跟着走
  (顺手把顶栏一直没被填充的面板版本/引擎状态补上);HTTP Server 头改为
  dailycheckin-plus-panel/2.1.0。
- crontab 托管标记改为 dailycheckin-plus managed,但**仍兼容老标记**并在保存时
  升级;crontab 里若存在裸的签到行,首次保存会整行注释留档后再接管,避免和新任务
  并存导致一天跑两遍、通知收两条。新增 tools/test_schedule.py(27 项断言)锁这条行为。
- README:快速开始拆成 docker compose / docker run 两种方式(含 Windows 路径写法和
  docker run 的升级步骤),更新通知样例、环境变量表、目录结构与常见问题。
- Dockerfile 增加「面板品牌自检」,装进镜像的网页必须是改名后的版本。
2026-10-15 20:54:00 -07:00

66 lines
2.2 KiB
Bash

#!/bin/sh
# 容器入口:准备目录与配置 -> 装定时任务 -> 同时跑 crond 和网页面板
set -e
DC_HOME="${DC_HOME:-/dailycheckin}"
export DC_HOME
CONFIG_DIR="$DC_HOME/config"
CRON_FILE="$DC_HOME/cron/crontab_list.sh"
mkdir -p "$CONFIG_DIR" "$DC_HOME/cron" "$DC_HOME/logs" "$DC_HOME/data"
cd "$DC_HOME"
echo "======================================================"
echo " dailycheckin-plus"
echo " 工作目录 : $DC_HOME"
echo " 面板端口 : ${PANEL_PORT:-8080}"
echo " 时区 : ${TZ:-Asia/Shanghai}"
echo " 后台账号 : $(python -c 'from panel import auth; print(auth.username() if auth.is_initialized() else "还没设置,首次打开网页会引导设置")' 2>/dev/null || echo "读取失败")"
echo " 脚本口令 : $([ -n "$PANEL_TOKEN" ] && echo 已开启 || echo 未开启)"
echo "======================================================"
# 1) 首次启动自动生成空配置与默认定时任务(已存在就一个字符都不动)
python - <<'PY'
import os
from panel import paths, schedule, store
paths.ensure_dirs()
if not os.path.exists(paths.CONFIG_PATH):
store.write(store.empty_template(), backup=False)
print("[初始化] 已生成空配置:", paths.CONFIG_PATH)
else:
print("[初始化] 沿用已有配置:", paths.CONFIG_PATH)
if not os.path.exists(paths.CRON_PATH):
schedule.write_text(schedule.read_text())
print("[初始化] 已生成默认定时任务:", paths.CRON_PATH)
else:
print("[初始化] 沿用已有定时任务:", paths.CRON_PATH)
PY
# 2) 装进 cron(网页上改周期后会由面板自己重装一次)
if command -v crontab >/dev/null 2>&1; then
crontab "$CRON_FILE" && echo "[初始化] 定时任务已装载"
else
echo "[初始化] 警告:容器内没有 crontab,定时签到不可用"
fi
# 3) 先起 crond(后台),再把网页面板放在前台
if command -v cron >/dev/null 2>&1; then
cron -f -L 15 &
CRON_PID=$!
echo "[启动] crond pid=$CRON_PID"
trap 'kill "$CRON_PID" 2>/dev/null || true' TERM INT
else
echo "[启动] 警告:容器内没有 cron"
fi
echo "[启动] 网页管理面板 http://0.0.0.0:${PANEL_PORT:-8080}"
python -m panel
STATUS=$?
if [ -n "${CRON_PID:-}" ]; then
kill "$CRON_PID" 2>/dev/null || true
fi
exit "$STATUS"