#!/bin/bash # EspoCRM Check & Rebuild Script # Prüft auf häufige Fehler und führt bei Fehlerfreiheit einen Rebuild durch set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" CUSTOM_DIR="$SCRIPT_DIR/custom" ERRORS=0 WARNINGS=0 echo "==========================================" echo "EspoCRM Check & Rebuild Script" echo "==========================================" echo "" # Farben für Output RED='\033[0;31m' YELLOW='\033[1;33m' GREEN='\033[0;32m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 1. JSON-Syntax prüfen echo -e "${BLUE}[1/3] Prüfe JSON-Syntax...${NC}" echo "---" JSON_FILES=$(find "$CUSTOM_DIR" -type f -name "*.json" 2>/dev/null) JSON_COUNT=$(echo "$JSON_FILES" | grep -c . || echo 0) if [ "$JSON_COUNT" -eq 0 ]; then echo -e "${YELLOW}⚠ Warnung: Keine JSON-Dateien im custom/ Verzeichnis gefunden${NC}" WARNINGS=$((WARNINGS + 1)) else echo "Gefundene JSON-Dateien: $JSON_COUNT" INVALID_JSON=0 while IFS= read -r file; do if [ -n "$file" ]; then if ! jq empty "$file" 2>/dev/null; then echo -e "${RED}✗ Fehler: Ungültiges JSON in $file${NC}" ERRORS=$((ERRORS + 1)) INVALID_JSON=$((INVALID_JSON + 1)) fi fi done <<< "$JSON_FILES" if [ "$INVALID_JSON" -eq 0 ]; then echo -e "${GREEN}✓ Alle JSON-Dateien sind gültig${NC}" else echo -e "${RED}✗ $INVALID_JSON JSON-Dateien mit Syntaxfehlern gefunden${NC}" fi fi echo "" # 2. Dateirechte prüfen und korrigieren echo -e "${BLUE}[2/3] Prüfe Dateirechte...${NC}" echo "---" WRONG_OWNER=0 FIXED_FILES=0 CUSTOM_FILES=$(find "$CUSTOM_DIR" -type f 2>/dev/null || echo "") CUSTOM_DIRS=$(find "$CUSTOM_DIR" -type d 2>/dev/null || echo "") if [ -z "$CUSTOM_FILES" ]; then echo -e "${YELLOW}⚠ Warnung: Keine Dateien im custom/ Verzeichnis gefunden${NC}" WARNINGS=$((WARNINGS + 1)) else # Prüfe und korrigiere Dateien einzeln while IFS= read -r file; do if [ -n "$file" ]; then OWNER=$(stat -c '%U:%G' "$file" 2>/dev/null || echo "unknown:unknown") if [ "$OWNER" != "www-data:www-data" ]; then WRONG_OWNER=$((WRONG_OWNER + 1)) # Korrigiere direkt nur diese Datei if sudo chown www-data:www-data "$file" 2>/dev/null && sudo chmod 664 "$file" 2>/dev/null; then FIXED_FILES=$((FIXED_FILES + 1)) fi fi fi done <<< "$CUSTOM_FILES" # Prüfe und korrigiere Verzeichnisse einzeln while IFS= read -r dir; do if [ -n "$dir" ]; then OWNER=$(stat -c '%U:%G' "$dir" 2>/dev/null || echo "unknown:unknown") if [ "$OWNER" != "www-data:www-data" ]; then sudo chown www-data:www-data "$dir" 2>/dev/null && sudo chmod 775 "$dir" 2>/dev/null fi fi done <<< "$CUSTOM_DIRS" if [ "$WRONG_OWNER" -eq 0 ]; then echo -e "${GREEN}✓ Alle Dateien haben korrekte Berechtigungen (www-data:www-data)${NC}" else if [ "$FIXED_FILES" -eq "$WRONG_OWNER" ]; then echo -e "${GREEN}✓ $FIXED_FILES Dateien korrigiert${NC}" else echo -e "${RED}✗ Fehler: Konnte nicht alle Berechtigungen korrigieren${NC}" ERRORS=$((ERRORS + 1)) fi fi fi echo "" # 3. Cache-Verzeichnis prüfen echo -e "${BLUE}[3/3] Prüfe System...${NC}" echo "---" if [ ! -d "$SCRIPT_DIR/data/cache" ]; then echo -e "${RED}✗ Fehler: Cache-Verzeichnis existiert nicht${NC}" ERRORS=$((ERRORS + 1)) else echo -e "${GREEN}✓ Cache-Verzeichnis existiert${NC}" fi if [ ! -d "$SCRIPT_DIR/data/logs" ]; then echo -e "${RED}✗ Fehler: Logs-Verzeichnis existiert nicht${NC}" ERRORS=$((ERRORS + 1)) else echo -e "${GREEN}✓ Logs-Verzeichnis existiert${NC}" fi echo "" echo "==========================================" echo "Zusammenfassung:" echo "---" if [ "$ERRORS" -eq 0 ] && [ "$WARNINGS" -eq 0 ]; then echo -e "${GREEN}✓ Keine Fehler oder Warnungen gefunden${NC}" elif [ "$ERRORS" -eq 0 ]; then echo -e "${YELLOW}⚠ $WARNINGS Warnung(en) gefunden (Rebuild wird trotzdem ausgeführt)${NC}" else echo -e "${RED}✗ $ERRORS Fehler und $WARNINGS Warnung(en) gefunden${NC}" fi echo "==========================================" echo "" # Entscheidung: Rebuild durchführen oder nicht if [ "$ERRORS" -gt 0 ]; then echo -e "${RED}REBUILD WIRD NICHT DURCHGEFÜHRT${NC}" echo "Bitte behebe die oben genannten Fehler und führe das Script erneut aus." exit 1 else echo -e "${GREEN}Starte Rebuild und Cache-Bereinigung...${NC}" echo "" # Rebuild und Cache-Bereinigung durchführen if command -v docker &> /dev/null; then echo -e "${BLUE}[1/2] Führe Clear Cache aus...${NC}" if docker exec espocrm php /var/www/html/command.php ClearCache 2>&1; then echo -e "${GREEN}✓ Cache erfolgreich gelöscht${NC}" echo "" echo -e "${BLUE}[2/2] Führe Rebuild aus...${NC}" if docker exec espocrm php /var/www/html/command.php rebuild 2>&1; then echo "" echo -e "${GREEN}==========================================" echo "✓ REBUILD ERFOLGREICH ABGESCHLOSSEN" echo "==========================================${NC}" exit 0 else echo "" echo -e "${RED}==========================================" echo "✗ REBUILD FEHLGESCHLAGEN" echo "==========================================${NC}" echo "Prüfe die Logs unter data/logs/ für weitere Details." exit 1 fi else echo -e "${RED}✗ Clear Cache fehlgeschlagen${NC}" echo "Fahre mit Rebuild fort..." echo "" if docker exec espocrm php /var/www/html/command.php rebuild 2>&1; then echo "" echo -e "${GREEN}==========================================" echo "✓ REBUILD ERFOLGREICH ABGESCHLOSSEN" echo "==========================================${NC}" exit 0 else echo "" echo -e "${RED}==========================================" echo "✗ REBUILD FEHLGESCHLAGEN" echo "==========================================${NC}" echo "Prüfe die Logs unter data/logs/ für weitere Details." exit 1 fi fi else echo -e "${RED}✗ Docker nicht gefunden. Rebuild kann nicht durchgeführt werden.${NC}" exit 1 fi fi