53 lines
1.6 KiB
Bash
Executable File
53 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Install a daily cron job to restart the docker-compose stack.
|
|
# Non-interactive; idempotent update of user's crontab.
|
|
# Usage:
|
|
# INTERVAL="15 3 * * *" ./install_daily_restart_cron.sh
|
|
# Defaults to 03:15 daily if INTERVAL not provided.
|
|
|
|
set -euo pipefail
|
|
|
|
REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
SCRIPT_PATH="$REPO_DIR/restart_containers.sh"
|
|
INTERVAL_CRON=${INTERVAL:-"15 3 * * *"}
|
|
|
|
if [ ! -x "$SCRIPT_PATH" ]; then
|
|
echo "Making restart_containers.sh executable"
|
|
chmod +x "$SCRIPT_PATH"
|
|
fi
|
|
|
|
if ! command -v crontab >/dev/null 2>&1; then
|
|
echo "Error: crontab not found on this system."
|
|
exit 1
|
|
fi
|
|
|
|
# Prefer docker compose; fallback to docker-compose is handled inside the script
|
|
|
|
# Compose file to use (default docker-compose.yml). Override via COMPOSE_FILE env
|
|
COMPOSE_FILE_PATH=${COMPOSE_FILE:-docker-compose.yml}
|
|
|
|
LOG_FILE="$REPO_DIR/logs/cron_restart.log"
|
|
mkdir -p "$(dirname "$LOG_FILE")"
|
|
|
|
# Build the cron line; ensure PATH for docker is available
|
|
CRON_LINE="$INTERVAL_CRON PATH=/usr/local/bin:/usr/bin:/bin /bin/bash -lc 'COMPOSE_FILE=$COMPOSE_FILE_PATH "$SCRIPT_PATH" >> "$LOG_FILE" 2>&1'"
|
|
|
|
# Install or update crontab entry
|
|
EXISTING_CRON="$(mktemp)"
|
|
trap 'rm -f "$EXISTING_CRON"' EXIT
|
|
|
|
crontab -l > "$EXISTING_CRON" 2>/dev/null || true
|
|
|
|
# Remove any previous lines referencing restart_containers.sh
|
|
grep -v "$SCRIPT_PATH" "$EXISTING_CRON" > "$EXISTING_CRON.cleaned" || true
|
|
mv "$EXISTING_CRON.cleaned" "$EXISTING_CRON"
|
|
|
|
echo "$CRON_LINE" >> "$EXISTING_CRON"
|
|
crontab "$EXISTING_CRON"
|
|
|
|
echo "Installed cron entry: $CRON_LINE"
|
|
echo "Logs will be written to: $LOG_FILE"
|
|
|
|
|