nis2-agile/scripts/supplier-questionnaire-cron.sh
DevEnv nis2-agile 261fc4cdd5 [FEAT] Fase 2 cron: reminder/overdue/ricorrenza questionari fornitori
scripts/supplier-questionnaire-runner.php: 3 fasi idempotenti (claim atomico via
UPDATE condizionato) — REMINDER (offset reminder_offsets), OVERDUE (due_at<NOW
-> expired), RICORRENZA (clona campagna ricorrente con nuovo token sq_).
scripts/supplier-questionnaire-cron.sh: wrapper TZ=Europe/Rome + flock + log.

Dry-run su host OK (0 campagne, 0 errori). Crontab 06:00 da registrare via
agile-services CRON_REGISTRY (azione utente/VIGILE). php -l + bash -n OK.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 17:27:50 +02:00

34 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# NIS2 Agile — Supplier Questionnaire Cron (Fase 2)
# Wrapper sottile per scripts/supplier-questionnaire-runner.php.
# - TZ=Europe/Rome (standard di progetto)
# - flock in /tmp (no run sovrapposti; il runner è comunque idempotente)
# - log su /var/log/nis2-supplier-cron.log
#
# Crontab root (06:00 Europe/Rome, fuori finestra DST 02:00-03:00):
# 0 6 * * * /var/www/nis2-agile/scripts/supplier-questionnaire-cron.sh
#
set -euo pipefail
export TZ=Europe/Rome
PHP_BIN="${PHP_BIN:-/usr/bin/php}"
RUNNER="/var/www/nis2-agile/scripts/supplier-questionnaire-runner.php"
LOG_FILE="/var/log/nis2-supplier-cron.log"
LOCK_FILE="/tmp/nis2-supplier-questionnaire-cron.lock"
mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null || true
touch "$LOG_FILE" 2>/dev/null || true
exec 9>"$LOCK_FILE"
if ! flock -n 9; then
echo "[$(date '+%Y-%m-%d %H:%M:%S %Z')] Lock attivo, run precedente in corso. Uscita." >> "$LOG_FILE"
exit 0
fi
echo "[$(date '+%Y-%m-%d %H:%M:%S %Z')] --- avvio supplier-questionnaire-cron ---" >> "$LOG_FILE"
"$PHP_BIN" "$RUNNER" >> "$LOG_FILE" 2>&1
rc=$?
echo "[$(date '+%Y-%m-%d %H:%M:%S %Z')] --- fine (exit=$rc) ---" >> "$LOG_FILE"
exit "$rc"