From dbf346cef3c2ee2501c291c33bccfef39490a3e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E6=B5=A9?= Date: Mon, 22 Sep 2025 23:49:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(docker):=20=E6=B7=BB=E5=8A=A0=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E6=97=B6=E8=BF=90=E8=A1=8C=20cron=20=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=9A=84=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yaml | 1 + entrypoint.sh | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 31d69f2..7155806 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -31,6 +31,7 @@ services: environment: - APK_PACKAGES=curl jq - CRON_SCHEDULE=*/1 * * * * + - RUN_CRON_ON_START=true volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./backups:/backups:ro diff --git a/entrypoint.sh b/entrypoint.sh index 8c08402..dbe92e3 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -17,12 +17,13 @@ CRON_SCHEDULE="${CRON_SCHEDULE:-*/30 * * * *}" INIT_SCRIPTS_DIR="${INIT_SCRIPTS_DIR:-/docker-entrypoint-init.d}" CRON_TASKS_DIR="${CRON_TASKS_DIR:-/docker-cron.d}" APK_PACKAGES="${APK_PACKAGES:-}" +RUN_CRON_ON_START="${RUN_CRON_ON_START:-false}" STDOUT_FD="/proc/1/fd/1" STDERR_FD="/proc/1/fd/2" CRON_SCRIPT="/usr/local/bin/run-cron-tasks.sh" -readonly CRON_SCHEDULE INIT_SCRIPTS_DIR CRON_TASKS_DIR APK_PACKAGES STDOUT_FD STDERR_FD CRON_SCRIPT +readonly CRON_SCHEDULE INIT_SCRIPTS_DIR CRON_TASKS_DIR APK_PACKAGES RUN_CRON_ON_START STDOUT_FD STDERR_FD CRON_SCRIPT if [ -z "$CRON_SCHEDULE" ]; then log_error "CRON_SCHEDULE is empty; refusing to start." @@ -72,6 +73,19 @@ fi log_info "initialization complete" +case "$RUN_CRON_ON_START" in + 1|[Tt][Rr][Uu][Ee]|[Yy][Ee][Ss]) + log_info "running cron tasks once at startup" + if ! "$CRON_SCRIPT" >>"$STDOUT_FD" 2>>"$STDERR_FD"; then + log_error "startup execution of cron tasks failed" + exit 1 + fi + ;; + *) + : + ;; +esac + cron_env_file=/var/spool/cron/crontabs/root { printf 'SHELL=/bin/sh\n'