131 lines
3.7 KiB
Bash
Executable file
131 lines
3.7 KiB
Bash
Executable file
#!/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
|