| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #!/bin/bash
- # Script per sincronizzare lo stato VPN con il database
- # Salva come: storage/scripts/sync-vpn-status.sh
- # Aggiungi al cron: */5 * * * * /var/www/polizia/storage/scripts/sync-vpn-status.sh
- SCRIPT_DIR="$(dirname "$0")"
- LARAVEL_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")"
- LOG_FILE="$SCRIPT_DIR/../logs/vpn-status-sync.log"
- # Funzione di logging
- log_message() {
- echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
- }
- # Controlla se AnyConnect è installato
- if [[ ! -f "/opt/cisco/anyconnect/bin/vpn" ]]; then
- log_message "ERROR: Cisco AnyConnect not found"
- exit 1
- fi
- # Ottieni lo stato reale del sistema
- VPN_OUTPUT=$(/opt/cisco/anyconnect/bin/vpn state 2>/dev/null)
- SYSTEM_STATUS="unknown"
- if echo "$VPN_OUTPUT" | grep -q "state: Connected"; then
- SYSTEM_STATUS="connected"
- elif echo "$VPN_OUTPUT" | grep -q "Disconnected"; then
- SYSTEM_STATUS="disconnected"
- fi
- log_message "INFO: System VPN status detected: $SYSTEM_STATUS"
- # Ottieni lo stato dal database
- cd "$LARAVEL_DIR"
- DB_STATUS=$(php artisan tinker --execute="echo \DB::table('vpn_status')->first()->status ?? 'no_record';" 2>/dev/null | tail -1)
- log_message "INFO: Database VPN status: $DB_STATUS"
- # Aggiorna il database se necessario
- if [[ "$SYSTEM_STATUS" != "$DB_STATUS" && "$SYSTEM_STATUS" != "unknown" ]]; then
- log_message "INFO: Status mismatch detected. Updating database from '$DB_STATUS' to '$SYSTEM_STATUS'"
- php artisan tinker --execute="
- \DB::table('vpn_status')->updateOrInsert(
- ['id' => 1],
- [
- 'status' => '$SYSTEM_STATUS',
- 'last_update' => now(),
- 'updated_at' => now(),
- ]
- );
- echo 'Database updated successfully';
- " >> "$LOG_FILE" 2>&1
- log_message "SUCCESS: Database status updated to: $SYSTEM_STATUS"
- else
- log_message "INFO: Status already in sync: $SYSTEM_STATUS"
- fi
|