- court_document_parser.py: парсер судебных документов с извлечением ФИО, номера дела, УИД, суда - court_parser_api.py: API для вызова парсера из n8n - pdf_court_parser.py: парсер PDF документов с извлечением текста - simple_project_updater.php: обновление проектов через CRM API - simple_project_updater_v2.php: обновленная версия с прямыми SQL запросами и S3Client - update_project_from_document.php: альтернативный скрипт обновления - test_input.json: тестовые данные для парсера - README файлы с документацией для всех скриптов Скрипты поддерживают: - Поиск проектов по ФИО, номеру дела, УИД, названию суда - Создание документов в CRM с загрузкой в S3 - Привязку документов к проектам - Логирование всех операций - Работу с n8n через SSH команды
70 lines
2.0 KiB
Bash
70 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT="/var/www/fastuser/data/www/crm.clientright.ru"
|
|
PHP_BIN="php"
|
|
SCRIPT="$ROOT/crm_extensions/file_storage/migrate_to_s3.php"
|
|
LOG_DIR="$ROOT/logs"
|
|
RUN_LOG="$LOG_DIR/s3_migration_runner.log"
|
|
OUT_LOG="$LOG_DIR/s3_migration_runner.out"
|
|
|
|
mkdir -p "$LOG_DIR"
|
|
|
|
# Tunables (can be overridden via environment)
|
|
LIMIT="${LIMIT:-500}"
|
|
OFFSET="${OFFSET:-0}"
|
|
ONLY_NOT="${ONLY_NOT:-1}"
|
|
SLEEP_SEC="${SLEEP_SEC:-2}"
|
|
DRY_RUN="${DRY_RUN:-0}"
|
|
|
|
# Preflight
|
|
if [[ ! -f "$SCRIPT" ]]; then
|
|
echo "[runner] migrate_to_s3.php not found at $SCRIPT" | tee -a "$RUN_LOG"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$DRY_RUN" -ne 1 ]]; then
|
|
if [[ ! -f "$ROOT/crm_extensions/.env" ]]; then
|
|
echo "[runner] Missing $ROOT/crm_extensions/.env (required for real run). Abort." | tee -a "$RUN_LOG"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "[runner] Start: $(date "+%Y-%m-%d %H:%M:%S") | LIMIT=$LIMIT OFFSET=$OFFSET ONLY_NOT=$ONLY_NOT DRY_RUN=$DRY_RUN" | tee -a "$RUN_LOG"
|
|
|
|
trap 'echo "[runner] Caught termination at $(date "+%Y-%m-%d %H:%M:%S")" | tee -a "$RUN_LOG"; exit 0' TERM INT
|
|
|
|
batch_index=0
|
|
while true; do
|
|
echo "[runner] Batch #$batch_index | offset=$OFFSET | $(date "+%Y-%m-%d %H:%M:%S")" | tee -a "$RUN_LOG"
|
|
|
|
CMD=(nice -n 10 ionice -c2 -n7 "$PHP_BIN" "$SCRIPT" --limit="$LIMIT" --offset="$OFFSET" --dry-run="$DRY_RUN" --only-not-migrated="$ONLY_NOT")
|
|
echo "[runner] Exec: ${CMD[*]}" | tee -a "$RUN_LOG"
|
|
|
|
# Capture output to parse rows count
|
|
output="$(${CMD[@]} 2>&1 | tee -a "$OUT_LOG")"
|
|
|
|
# Parse "Rows: N (limit=..., offset=..., ...)" from output
|
|
rows=$(echo "$output" | sed -n 's/.*Rows: \([0-9]\+\) (.*/\1/p' | tail -n1)
|
|
if [[ -z "$rows" ]]; then
|
|
# Fallback: assume full batch to continue once
|
|
rows="$LIMIT"
|
|
fi
|
|
|
|
echo "[runner] Rows reported: $rows" | tee -a "$RUN_LOG"
|
|
|
|
if (( rows < LIMIT )); then
|
|
echo "[runner] Last batch smaller than LIMIT ($rows < $LIMIT). Finishing." | tee -a "$RUN_LOG"
|
|
break
|
|
fi
|
|
|
|
OFFSET=$((OFFSET + LIMIT))
|
|
batch_index=$((batch_index + 1))
|
|
sleep "$SLEEP_SEC"
|
|
done
|
|
|
|
echo "[runner] Done at $(date "+%Y-%m-%d %H:%M:%S")" | tee -a "$RUN_LOG"
|
|
|
|
|
|
|