feat(docker): 添加启动时运行 cron 任务的选项

This commit is contained in:
严浩
2025-09-22 23:49:45 +08:00
parent 20808e8a55
commit dbf346cef3
2 changed files with 16 additions and 1 deletions

View File

@@ -31,6 +31,7 @@ services:
environment: environment:
- APK_PACKAGES=curl jq - APK_PACKAGES=curl jq
- CRON_SCHEDULE=*/1 * * * * - CRON_SCHEDULE=*/1 * * * *
- RUN_CRON_ON_START=true
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
- ./backups:/backups:ro - ./backups:/backups:ro

View File

@@ -17,12 +17,13 @@ CRON_SCHEDULE="${CRON_SCHEDULE:-*/30 * * * *}"
INIT_SCRIPTS_DIR="${INIT_SCRIPTS_DIR:-/docker-entrypoint-init.d}" INIT_SCRIPTS_DIR="${INIT_SCRIPTS_DIR:-/docker-entrypoint-init.d}"
CRON_TASKS_DIR="${CRON_TASKS_DIR:-/docker-cron.d}" CRON_TASKS_DIR="${CRON_TASKS_DIR:-/docker-cron.d}"
APK_PACKAGES="${APK_PACKAGES:-}" APK_PACKAGES="${APK_PACKAGES:-}"
RUN_CRON_ON_START="${RUN_CRON_ON_START:-false}"
STDOUT_FD="/proc/1/fd/1" STDOUT_FD="/proc/1/fd/1"
STDERR_FD="/proc/1/fd/2" STDERR_FD="/proc/1/fd/2"
CRON_SCRIPT="/usr/local/bin/run-cron-tasks.sh" 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 if [ -z "$CRON_SCHEDULE" ]; then
log_error "CRON_SCHEDULE is empty; refusing to start." log_error "CRON_SCHEDULE is empty; refusing to start."
@@ -72,6 +73,19 @@ fi
log_info "initialization complete" 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 cron_env_file=/var/spool/cron/crontabs/root
{ {
printf 'SHELL=/bin/sh\n' printf 'SHELL=/bin/sh\n'