- 品牌字串全面更换: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 增加「面板品牌自检」,装进镜像的网页必须是改名后的版本。
66 lines
2.2 KiB
Bash
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"
|