From a74680c0f07a5ffbd25ef4b41b4cb678f258377f Mon Sep 17 00:00:00 2001 From: nite Date: Fri, 21 Nov 2025 10:24:31 +0000 Subject: [PATCH] add cron task --- caddy/Containerfile | 11 ++++++++--- caddy/entrypoint.sh | 36 ++++-------------------------------- caddy/update_geodb.sh | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 35 deletions(-) create mode 100644 caddy/update_geodb.sh diff --git a/caddy/Containerfile b/caddy/Containerfile index a2b5ac4..539983b 100644 --- a/caddy/Containerfile +++ b/caddy/Containerfile @@ -13,10 +13,15 @@ RUN xcaddy build \ FROM docker.io/library/caddy:latest -RUN apk update && apk add --no-cache git git-daemon cgit python3 py3-pygments py3-markdown py3-docutils groff curl +RUN apk update && apk add --no-cache git git-daemon cgit python3 py3-pygments py3-markdown py3-docutils groff curl dcron COPY --from=builder /usr/bin/caddy /usr/bin/caddy -COPY caddy/entrypoint.sh /usr/local/bin/entrypoint.sh -RUN chmod +x /usr/local/bin/entrypoint.sh +COPY entrypoint.sh /usr/local/bin/entrypoint.sh +COPY update_geodb.sh /usr/local/bin/update_geodb.sh + +RUN chmod +x /usr/local/bin/entrypoint.sh \ + && chmod +x /usr/local/bin/update_geodb.sh \ + && echo "0 0 */3 * * /usr/local/bin/update_geodb.sh > /proc/1/fd/1 2>/proc/1/fd/2" | crontab - + ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] diff --git a/caddy/entrypoint.sh b/caddy/entrypoint.sh index cf06b57..dfa7d83 100644 --- a/caddy/entrypoint.sh +++ b/caddy/entrypoint.sh @@ -1,38 +1,10 @@ #!/bin/sh -GEODB_DIR="/config/geodb" -GEODB_FILE="$GEODB_DIR/GeoLite2-Country.mmdb" -GEODB_URL="https://git.io/GeoLite2-Country.mmdb" -TWO_WEEKS_SECONDS=1209600 # 14 * 24 * 60 * 60 +# 首次执行 GeoLite2 数据库更新脚本,确保 Caddy 启动前文件可用 +/usr/local/bin/update_geodb.sh -mkdir -p "$GEODB_DIR" - -if [ ! -f "$GEODB_FILE" ]; then - echo "GeoLite2-Country.mmdb 不存在,正在下载..." - curl -sSL "$GEODB_URL" -o "$GEODB_FILE" - if [ $? -eq 0 ]; then - echo "GeoLite2-Country.mmdb 下载成功." - else - echo "GeoLite2-Country.mmdb 下载失败." - fi -else - # 检查文件修改时间 - FILE_MOD_TIME=$(stat -c %Y "$GEODB_FILE") - CURRENT_TIME=$(date +%s) - AGE=$((CURRENT_TIME - FILE_MOD_TIME)) - - if [ "$AGE" -ge "$TWO_WEEKS_SECONDS" ]; then - echo "GeoLite2-Country.mmdb 已超过两周未更新,正在下载新版本..." - curl -sSL "$GEODB_URL" -o "$GEODB_FILE" - if [ $? -eq 0 ]; then - echo "GeoLite2-Country.mmdb 下载成功." - else - echo "GeoLite2-Country.mmdb 下载失败." - fi - else - echo "GeoLite2-Country.mmdb 在两周内已更新,跳过下载." - fi -fi +# 启动 cron 服务 +crond -b -L /var/log/cron.log # 执行原始的 Caddy ENTRYPOINT exec caddy run --config /etc/caddy/Caddyfile --adapter caddyfile diff --git a/caddy/update_geodb.sh b/caddy/update_geodb.sh new file mode 100644 index 0000000..bb03440 --- /dev/null +++ b/caddy/update_geodb.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +GEODB_DIR="/config/geodb" +GEODB_FILE="$GEODB_DIR/GeoLite2-Country.mmdb" +GEODB_URL="https://git.io/GeoLite2-Country.mmdb" +INTERVAL_SECONDS=259200 # 3 * 24 * 60 * 60 + +mkdir -p "$GEODB_DIR" + +if [ ! -f "$GEODB_FILE" ]; then + echo "GeoLite2-Country.mmdb 不存在,正在下载..." + curl -sSL "$GEODB_URL" -o "$GEODB_FILE" + if [ $? -eq 0 ]; then + echo "GeoLite2-Country.mmdb 下载成功." + else + echo "GeoLite2-Country.mmdb 下载失败." + fi +else + # 检查文件修改时间 + FILE_MOD_TIME=$(stat -c %Y "$GEODB_FILE") + CURRENT_TIME=$(date +%s) + AGE=$((CURRENT_TIME - FILE_MOD_TIME)) + + if [ "$AGE" -ge "$INTERVAL_SECONDS" ]; then + echo "GeoLite2-Country.mmdb 正在下载新版本..." + curl -sSL "$GEODB_URL" -o "$GEODB_FILE" + if [ $? -eq 0 ]; then + echo "GeoLite2-Country.mmdb 下载成功." + else + echo "GeoLite2-Country.mmdb 下载失败." + fi + else + echo "GeoLite2-Country.mmdb 跳过下载." + fi +fi