#!/bin/bash # Nextcloud Maintenance Script # This script performs maintenance tasks for Nextcloud # Colors for output GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color echo -e "${YELLOW}Running Nextcloud maintenance tasks...${NC}" # Load environment variables if [ -f "./nextcloud/.env" ]; then source ./nextcloud/.env echo -e "${GREEN}Loaded Nextcloud environment variables.${NC}" else echo -e "${RED}Nextcloud .env file not found!${NC}" exit 1 fi if [ -f "./core/.env" ]; then source ./core/.env echo -e "${GREEN}Loaded core environment variables.${NC}" else echo -e "${RED}Core .env file not found!${NC}" exit 1 fi # Function to fix database collation version mismatch fix_database_collation() { echo -e "${YELLOW}Checking and fixing database collation version...${NC}" if docker exec postgres psql -U "${POSTGRES_USER}" -d "${NEXTCLOUD_DB_NAME}" -c "ALTER DATABASE ${NEXTCLOUD_DB_NAME} REFRESH COLLATION VERSION;" 2>&1 | grep -q "ALTER DATABASE"; then echo -e "${GREEN}Database collation version updated successfully.${NC}" return 0 else echo -e "${YELLOW}Database collation check completed (may already be up to date).${NC}" return 0 fi } # Function to check Nextcloud status check_status() { echo -e "${YELLOW}Checking Nextcloud status...${NC}" docker exec nextcloud php /var/www/html/occ status 2>&1 | grep -v "WARNING.*collation" return 0 } # Function to scan files scan_files() { echo -e "${YELLOW}Scanning files for user: $1...${NC}" docker exec nextcloud php /var/www/html/occ files:scan --all --unscanned "$1" 2>&1 | grep -v "WARNING.*collation" return 0 } # Function to update Nextcloud update_nextcloud() { echo -e "${YELLOW}Checking for Nextcloud updates...${NC}" docker exec nextcloud php /var/www/html/occ upgrade 2>&1 | grep -v "WARNING.*collation" return 0 } # Function to optimize database optimize_database() { echo -e "${YELLOW}Optimizing database...${NC}" docker exec nextcloud php /var/www/html/occ db:add-missing-indices 2>&1 | grep -v "WARNING.*collation" docker exec nextcloud php /var/www/html/occ db:add-missing-columns 2>&1 | grep -v "WARNING.*collation" docker exec nextcloud php /var/www/html/occ db:add-missing-primary-keys 2>&1 | grep -v "WARNING.*collation" return 0 } # Function to clear caches clear_caches() { echo -e "${YELLOW}Clearing Nextcloud caches...${NC}" docker exec nextcloud php /var/www/html/occ files:cleanup 2>&1 | grep -v "WARNING.*collation" docker exec nextcloud php /var/www/html/occ maintenance:repair 2>&1 | grep -v "WARNING.*collation" return 0 } # Main execution case "${1:-all}" in collation) fix_database_collation ;; status) check_status ;; scan) if [ -z "$2" ]; then echo -e "${YELLOW}Scanning all files...${NC}" docker exec nextcloud php /var/www/html/occ files:scan --all --unscanned 2>&1 | grep -v "WARNING.*collation" else scan_files "$2" fi ;; update) update_nextcloud ;; optimize) optimize_database ;; cache) clear_caches ;; all) fix_database_collation echo "" check_status echo "" optimize_database echo "" clear_caches echo "" echo -e "${GREEN}All maintenance tasks completed.${NC}" ;; *) echo "Usage: $0 [collation|status|scan|update|optimize|cache|all]" echo "" echo "Commands:" echo " collation - Fix database collation version mismatch" echo " status - Check Nextcloud status" echo " scan - Scan files (optionally specify username)" echo " update - Update Nextcloud" echo " optimize - Optimize database indices and columns" echo " cache - Clear caches and repair" echo " all - Run all maintenance tasks (default)" exit 1 ;; esac