33 lines
1.1 KiB
Bash
33 lines
1.1 KiB
Bash
#!/bin/sh
|
|
|
|
set -e # Exit immediately if a command exits with a non-zero status.
|
|
|
|
# Define the command to be executed by cron or manually
|
|
APP_CMD="/usr/local/bin/ruleset-sync -i /config/template.json -o /rules"
|
|
|
|
# === Manual Run ===
|
|
# If the first argument is "manual", run the sync once and exit.
|
|
if [ "$1" = "manual" ]; then
|
|
echo "[$(date +"%Y-%m-%d %H:%M:%S")] Running one-time manual sync..."
|
|
# Execute the command as the non-root 'app' user
|
|
su-exec app:app ${APP_CMD}
|
|
exit 0
|
|
fi
|
|
|
|
# === Cron Setup ===
|
|
# This section runs as root to set up the cron job.
|
|
|
|
echo "Setting up cron job with schedule: ${CRON_SCHEDULE}"
|
|
|
|
# Remove any existing crontab
|
|
crontab -d || true
|
|
|
|
# Add the new cron job. It will run the command as the 'app' user
|
|
# and redirect stdout/stderr to the container's log stream.
|
|
echo "${CRON_SCHEDULE} su-exec app:app ${APP_CMD} > /proc/1/fd/1 2>/proc/1/fd/2" | crontab -
|
|
|
|
# Start the cron daemon in the foreground.
|
|
# This keeps the container running and handles executing the scheduled jobs.
|
|
# Logs from crond itself and the script's output will go to Docker logs.
|
|
echo "Starting cron daemon..."
|
|
exec crond -f -l 8 |