diff --git a/README.md b/README.md index afa6393..8ca2f6a 100644 --- a/README.md +++ b/README.md @@ -359,3 +359,4 @@ chmod +x script.sh - Готовый starter: `docs/rag-mcp-starter/` - Работа с GitHub/GitLab/Gitea: `docs/openclaude-with-repositories.md` - Примеры cron-автоматизации: `docs/cron-examples.md` +- Автоустановка cron: `scripts/install-cron.sh` diff --git a/docs/cron-examples.md b/docs/cron-examples.md index 69b868c..8f95e17 100644 --- a/docs/cron-examples.md +++ b/docs/cron-examples.md @@ -22,6 +22,27 @@ mkdir -p "$HOME/openclaude-logs" crontab -e ``` +## Автоустановка cron одной командой + +Из корня репозитория: + +```bash +chmod +x scripts/install-cron.sh +./scripts/install-cron.sh +``` + +С кастомной моделью: + +```bash +./scripts/install-cron.sh --model qwen2.5:3b +``` + +С кастомным путём репозитория/логов: + +```bash +./scripts/install-cron.sh --repo-path /home/USER/openclaude-LLM-local --log-dir /home/USER/openclaude-logs +``` + ## 3 cron-задачи ```cron diff --git a/scripts/install-cron.sh b/scripts/install-cron.sh new file mode 100755 index 0000000..88a60e7 --- /dev/null +++ b/scripts/install-cron.sh @@ -0,0 +1,85 @@ +#!/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