#!/usr/bin/env bash # Schedule NPMplus backup via cron (W1-8). Run from project root. # Usage: bash scripts/maintenance/schedule-npmplus-backup-cron.sh [--install|--show] set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" INSTALL_ROOT="${CRON_PROJECT_ROOT:-$PROJECT_ROOT}" BACKUP_SCRIPT="$INSTALL_ROOT/scripts/verify/backup-npmplus.sh" LOG_DIR="$INSTALL_ROOT/logs" CRON_LINE="0 3 * * * /usr/bin/flock -n /var/lock/npmplus-backup.lock bash -lc 'cd $INSTALL_ROOT && bash $BACKUP_SCRIPT >> $LOG_DIR/npmplus-backup.log 2>&1'" validate_install_root() { if [[ "$INSTALL_ROOT" == /tmp/* ]]; then echo "Refusing to install cron from ephemeral path: $INSTALL_ROOT" echo "Set CRON_PROJECT_ROOT to a persistent checkout on the host, then rerun." exit 1 fi if [[ ! -f "$BACKUP_SCRIPT" ]]; then echo "Backup script not found at: $BACKUP_SCRIPT" echo "Set CRON_PROJECT_ROOT to the host path that contains scripts/verify/backup-npmplus.sh." exit 1 fi } case "${1:-}" in --install) validate_install_root mkdir -p "$LOG_DIR" { crontab -l 2>/dev/null | grep -v 'backup-npmplus.sh' || true echo "$CRON_LINE" } | crontab - echo "Installed: $CRON_LINE" ;; --show) validate_install_root echo "Crontab line: $CRON_LINE" ;; *) echo "Usage: $0 [--install|--show]" exit 0 ;; esac