Files
espocrm/custom/scripts/check_and_rebuild.sh

158 lines
4.9 KiB
Bash
Executable File

#!/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
echo -e "${BLUE}[2/3] Prüfe Dateirechte...${NC}"
echo "---"
WRONG_OWNER=0
CUSTOM_FILES=$(find "$CUSTOM_DIR" -type f 2>/dev/null || echo "")
if [ -z "$CUSTOM_FILES" ]; then
echo -e "${YELLOW}⚠ Warnung: Keine Dateien im custom/ Verzeichnis gefunden${NC}"
WARNINGS=$((WARNINGS + 1))
else
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
echo -e "${YELLOW}⚠ Warnung: Falsche Dateirechte für $file (Owner: $OWNER, erwartet: www-data:www-data)${NC}"
WRONG_OWNER=$((WRONG_OWNER + 1))
WARNINGS=$((WARNINGS + 1))
fi
fi
done <<< "$CUSTOM_FILES"
if [ "$WRONG_OWNER" -eq 0 ]; then
echo -e "${GREEN}✓ Alle Dateien haben korrekte Berechtigungen (www-data:www-data)${NC}"
else
echo -e "${YELLOW}$WRONG_OWNER Dateien mit falschen Berechtigungen gefunden${NC}"
echo ""
echo "Zum Beheben aller Berechtigungen ausführen:"
echo " sudo chown -R www-data:www-data $CUSTOM_DIR"
echo " sudo chmod -R 664 $CUSTOM_DIR/**/*.json"
echo " sudo chmod -R 775 $CUSTOM_DIR/**/*/ # Verzeichnisse"
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...${NC}"
echo ""
# Rebuild durchführen
if command -v docker &> /dev/null; then
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}✗ Docker nicht gefunden. Rebuild kann nicht durchgeführt werden.${NC}"
exit 1
fi
fi