#!/usr/bin/env bash set -euo pipefail # Install 3 maintenance cron jobs for OpenClaude local stack. # Idempotent: replaces managed block, avoids duplicates. # # Usage: # ./scripts/install-cron.sh # ./scripts/install-cron.sh --user-home /home/myuser --model qwen2.5:3b USER_HOME="${HOME}" MODEL="qwen2.5-coder:7b" REPO_PATH="${USER_HOME}/openclaude-LLM-local" LOG_DIR="${USER_HOME}/openclaude-logs" CRON_TMP="$(mktemp)" while [[ $# -gt 0 ]]; do case "$1" in --user-home) USER_HOME="$2" REPO_PATH="${USER_HOME}/openclaude-LLM-local" LOG_DIR="${USER_HOME}/openclaude-logs" shift 2 ;; --repo-path) REPO_PATH="$2" shift 2 ;; --log-dir) LOG_DIR="$2" shift 2 ;; --model) MODEL="$2" shift 2 ;; *) echo "Unknown argument: $1" exit 2 ;; esac done START_MARK="# BEGIN OPENCLAUDE_MANAGED_CRON" END_MARK="# END OPENCLAUDE_MANAGED_CRON" mkdir -p "$LOG_DIR" current_cron="$(mktemp)" if crontab -l > "$current_cron" 2>/dev/null; then : else : > "$current_cron" fi # Remove old managed block if present awk -v s="$START_MARK" -v e="$END_MARK" ' $0 == s {inblock=1; next} $0 == e {inblock=0; next} !inblock {print} ' "$current_cron" > "$CRON_TMP" cat >> "$CRON_TMP" <> $LOG_DIR/status.log 2>&1 # 2) Weekly model refresh 30 4 * * 0 /usr/bin/ollama pull $MODEL >> $LOG_DIR/model-update.log 2>&1 # 3) Monthly safe stack upgrade 0 5 1 * * cd $REPO_PATH/docs/rag-mcp-starter && ./upgrade.sh --model $MODEL >> $LOG_DIR/stack-upgrade.log 2>&1 $END_MARK EOF crontab "$CRON_TMP" rm -f "$current_cron" "$CRON_TMP" echo "Cron jobs installed." echo "Repo path: $REPO_PATH" echo "Log dir: $LOG_DIR" echo "Model: $MODEL" echo echo "Current crontab:" crontab -l