Files
dnf-repo-test/docker/syncer/entrypoint.sh
T

43 lines
1.2 KiB
Bash

#!/usr/bin/env bash
# Container entrypoint: run sync.sh once, or in a loop every
# SYNC_INTERVAL_SECONDS. There's no systemd/cron inside the container, so a
# simple sleep-loop is the pragmatic choice.
set -euo pipefail
: "${SYNC_INTERVAL_SECONDS:=3600}"
: "${RUN_ONCE:=false}"
log() { echo "[entrypoint] $(date '+%Y-%m-%d %H:%M:%S') $*"; }
run_once() {
/usr/local/bin/sync.sh
}
if [[ "$RUN_ONCE" == "true" ]]; then
log "RUN_ONCE=true - running sync.sh once and exiting"
run_once
exit $?
fi
log "Starting sync loop (interval: ${SYNC_INTERVAL_SECONDS}s)"
# Graceful shutdown on docker stop / compose down
term_handler() {
log "Received SIGTERM, shutting down"
exit 0
}
trap term_handler SIGTERM SIGINT
while true; do
# NOTE: don't inline `run_once` into `if ! run_once; then ...` - inside
# that then-branch, $? would reflect the (always-0) negated test itself,
# not run_once's real exit code. Capture it explicitly instead.
rc=0
run_once || rc=$?
if [[ $rc -ne 0 ]]; then
log "sync.sh failed (exit ${rc}) - will retry after the next interval"
fi
log "Sleeping ${SYNC_INTERVAL_SECONDS}s until next sync..."
sleep "${SYNC_INTERVAL_SECONDS}" &
wait $!
done