AEM — Offline Compaction [LINUX]

SYNOPSIS
AEM Offline TAR Compaction script, using a custom logback configuration file with custom encoder for better logging.
For Windows
If you wish to execute on windows environment use the THIS script
Guide
#!/bin/bash ############## AEM Offline TAR Compaction #################################### # # # ███████╗██╗ ██╗██╗ ██╗██████╗ ███████╗██╗ ██╗ ██████╗ ██████╗ ███████╗ # # ██╔════╝██║ ██╔╝╚██╗ ██╔╝██╔══██╗██╔════╝██║ ██║██╔═══██╗██╔══██╗██╔════╝ # # ███████╗█████╔╝ ╚████╔╝ ██║ ██║█████╗ ██║ ██║██║ ██║██████╔╝███████╗ # # ╚════██║██╔═██╗ ╚██╔╝ ██║ ██║██╔══╝ ╚██╗ ██╔╝██║ ██║██╔═══╝ ╚════██║ # # ███████║██║ ██╗ ██║ ██████╔╝███████╗ ╚████╔╝ ╚██████╔╝██║ ███████║ # # ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═══╝ ╚═════╝ ╚═╝ ╚══════╝ # # # # # # SCRIPT: AEM Offline TAR Compaction # # AUTHOR: Shashi Yebbare # # DATE: FEB, 09, 2019 # # REV: 1.3.P # # (For Alpha, Beta, Dev, Test and Production) # # # # PLATFORM: AIX, HP-UX, Linux, Solaris # # # # PURPOSE: To perform offline AEM compaction on Segmentstore # # and reduce the size of the AEM repository, Script # # uses a custom log-back XML configuration to log # # additional compaction information. # # # # REVISED LIST: # # DATE: FEB, 17 2019 # # BY: Shashi Yebbare # # MODIFICATION: Added custom log back XML configuration # # # # # # set -n # Uncomment to check your syntax, without execution. # # # NOTE: Do not forget to put the comment back in or # # # the shell script will not execute! # # # ################################################################################## # ####################### BEGIN -- Parameter declaration ########################## Date=$(date +%m-%d-%Y) # Get Current Date Time=$(date +%T) # Get Current Time date +"%T" Type="Author" Port="4502" Base="/opt/aem/${Type}/crx-quickstart" Segmentstore="${Base}/repository/segmentstore" OAK_JAR="/opt/aem/${Type}/support/oak-run.jar" SUPPORTDIR="/opt/aem/${Type}/support" CRXLOGS="${Base}/logs" LOGFILE="TarComapction_${Date}_${Time}.log" COUNT=0 DUMPSPATH="${SUPPORTDIR}/compactiondumps" COMPACTARGS="-Dtar.memoryMapped=true -Doak.compaction.eagerFlush=true -Dcompaction-progress-log=5000000 -Dcompress-interval=150000000 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DUMPSPATH}" LOGBACKCONF="${SUPPORTDIR}/logback-compaction.xml" SDMEMORY="8g" # ####################### END -- Parameter declaration ############################ # ############# ############# ############# # ## TIME TO RUN THE SCRIPT ## # ## ## # ## You shouldn't need to edit anything ## # ## beneath this line ## # ## ## # ############# ############# ############# # BEGIN -- Function checks the storagae size of segmentstore function SDRepositorySize { echo ">>>> Repository Size: " echo " " | tee -a "$CRXLOGS/$LOGFILE" du -h $Segmentstore | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" } # END -- Function checks the storagae size of segmentstore # BEGIN -- Function to bring AEM instance offline function SDStopAEM { echo " " | tee -a "$CRXLOGS/$LOGFILE" echo ">>>> Stopping AEM ${Type} Instance" | tee -a "$CRXLOGS/$LOGFILE" Command="bash $Base/bin/stop" eval $Command | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" echo "Waiting 10 seconds" | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" sleep 10s PID=$(cat $Base/conf/cq.pid 2>/dev/null) if [ "$PID" ]; then echo " " | tee -a "$CRXLOGS/$LOGFILE" echo "AEM PID $PID" | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" if ps -p $PID > /dev/null 2>&1; then eval $Command | tee -a "$CRXLOGS/$LOGFILE" sleep 30s while ps -p $PID > /dev/null 2>&1 && (($COUNT < $MAXCOUNT)); do sleep 10s let COUNT=COUNT+1 done else echo "AEM was already stopped" | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" fi else echo "cq.pid was not found" | tee -a "$CRXLOGS/$LOGFILE" echo "AEM ${Type} is already stopped" | tee -a "$CRXLOGS/$LOGFILE" fi if ps -p $PID > /dev/null 2>&1; then echo "The AEM application is still running after maxcount" | tee -a "$CRXLOGS/$LOGFILE" WAIT_SECONDS=600 echo "Waiting additional $WAIT_SECONDS for kill process to complete" | tee -a "$CRXLOGS/$LOGFILE" count=0 while kill $PID > /dev/null do sleep 1 ((count++)) if ! ps -p $PID > /dev/null ; then break fi if [ $count -gt $WAIT_SECONDS ]; then kill -9 $PID break fi done echo "Process has been killed after $count seconds" | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" fi echo "AEM ${Type} Successfully stopped" | tee -a "$CRXLOGS/$LOGFILE" } # END -- Function to bring AEM instance offline # BEGIN -- Offline Tar Comapction function SDOfflineCompaction { echo ">>>> Starting Offline Tar Compaction Process" | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" echo ">>>> Verifying Checkpoints" | tee -a "$CRXLOGS/$LOGFILE" Command="java -server -Xmx${SDMEMORY} ${COMPACTARGS} -Dlogback.configurationFile=${LOGBACKCONF} -jar ${OAK_JAR} checkpoints $Segmentstore" eval $Command | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" echo ">>>> Removing UnReferenced Checpoints" | tee -a "$CRXLOGS/$LOGFILE" Command="java -server -Xmx${SDMEMORY} ${COMPACTARGS} -Dlogback.configurationFile=${LOGBACKCONF} -jar ${OAK_JAR} checkpoints $Segmentstore rm-unreferenced" eval $Command | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" echo ">>>> Compacting Segmentstore" | tee -a "$CRXLOGS/$LOGFILE" Command="java -server -Xmx${SDMEMORY} ${COMPACTARGS} -Dlogback.configurationFile=${LOGBACKCONF} -jar ${OAK_JAR} compact $Segmentstore" eval $Command | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" echo "Waiting 10 seconds" | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" sleep 10 echo ">>>> Compaction Process Successfully Completed" | tee -a "$CRXLOGS/$LOGFILE" } # END -- Offline Tar Comapction # BEGIN -- Start AEM Instance function SDStartAEM { echo "Starting AEM ${Type} Instance" | tee -a "$CRXLOGS/$LOGFILE" Command="cd $Base/bin && ./start" eval $Command | tee -a "$CRXLOGS/$LOGFILE" sleep 10 #Get the process id from AEM PID=$(cat $Base/conf/cq.pid 2>/dev/null) ps -p $PID } # END -- Start AEM Instance # ############################## Actual Script Execution ############################## # Executing the function accordingly to get repository size before compaction # # and execute comapction and check size of the repository after comapction # ####################################################################################### echo " " echo " ############## AEM Offline TAR Compaction #################################### # # # ███████╗██╗ ██╗██╗ ██╗██████╗ ███████╗██╗ ██╗ ██████╗ ██████╗ ███████╗ # # ██╔════╝██║ ██╔╝╚██╗ ██╔╝██╔══██╗██╔════╝██║ ██║██╔═══██╗██╔══██╗██╔════╝ # # ███████╗█████╔╝ ╚████╔╝ ██║ ██║█████╗ ██║ ██║██║ ██║██████╔╝███████╗ # # ╚════██║██╔═██╗ ╚██╔╝ ██║ ██║██╔══╝ ╚██╗ ██╔╝██║ ██║██╔═══╝ ╚════██║ # # ███████║██║ ██╗ ██║ ██████╔╝███████╗ ╚████╔╝ ╚██████╔╝██║ ███████║ # # ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═══╝ ╚═════╝ ╚═╝ ╚══════╝ # # # # # # SCRIPT: AEM Offline TAR Compaction # # AUTHOR: Shashi Yebbare # # DATE: FEB, 09, 2019 # # REV: 1.3.P # # (For Alpha, Beta, Dev, Test and Production) # # # # PLATFORM: AIX, HP-UX, Linux, Solaris # # # # PURPOSE: To perform offline AEM compaction on Segmentstore # # and reduce the size of the AEM repository, Script # # uses a custom log-back XML configuration to log # # additional compaction information. # # # # REVISED LIST: # # DATE: FEB, 17 2019 # # BY: Shashi Yebbare # # MODIFICATION: Added custom log back XML configuration # # # # # # set -n # Uncomment to check your syntax, without execution. # # # NOTE: Do not forget to put the comment back in or # # # the shell script will not execute! # # # ################################################################################## " | tee -a "$CRXLOGS/$LOGFILE" Date=$(date +%m-%d-%Y) # Get Current Date OutTime=$(date +%r) # Get Current Time echo " " | tee -a "$CRXLOGS/$LOGFILE" echo "Compaction Script -- Start Time: $Date @ $OutTime" | tee -a "$CRXLOGS/$LOGFILE" echo " " | tee -a "$CRXLOGS/$LOGFILE" SDStopAEM; echo " " | tee -a "$CRXLOGS/$LOGFILE" echo ">>>> Checking Repository size BEFORE Compaction" | tee -a "$CRXLOGS/$LOGFILE" SDRepositorySize; echo " " | tee -a "$CRXLOGS/$LOGFILE" SDOfflineCompaction; echo " " | tee -a "$CRXLOGS/$LOGFILE" echo ">>>> Checking Repository size AFTER Compaction" | tee -a "$CRXLOGS/$LOGFILE" SDRepositorySize; echo " " | tee -a "$CRXLOGS/$LOGFILE" SDStartAEM; # Concluding the Compaction Process Date=$(date +%m-%d-%Y) # Get Current Date OutTime=$(date +%r) # Get Current Time echo " " | tee -a "$CRXLOGS/$LOGFILE" echo "Compaction Script -- End Time: $Date @ $OutTime" | tee -a "$CRXLOGS/$LOGFILE"
LOGBACK File
<?xml version="1.0" encoding="UTF-8"?> <!-- ############## AEM Offline TAR Compaction #################################### # # # ███████╗██╗ ██╗██╗ ██╗██████╗ ███████╗██╗ ██╗ ██████╗ ██████╗ ███████╗ # # ██╔════╝██║ ██╔╝╚██╗ ██╔╝██╔══██╗██╔════╝██║ ██║██╔═══██╗██╔══██╗██╔════╝ # # ███████╗█████╔╝ ╚████╔╝ ██║ ██║█████╗ ██║ ██║██║ ██║██████╔╝███████╗ # # ╚════██║██╔═██╗ ╚██╔╝ ██║ ██║██╔══╝ ╚██╗ ██╔╝██║ ██║██╔═══╝ ╚════██║ # # ███████║██║ ██╗ ██║ ██████╔╝███████╗ ╚████╔╝ ╚██████╔╝██║ ███████║ # # ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═══╝ ╚═════╝ ╚═╝ ╚══════╝ # # # # # # SCRIPT: AEM Offline TAR Compaction - logback-compaction configuration # # AUTHOR: Shashi Yebbare # # DATE: FEB, 09, 2019 # # REV: 1.3.P # # (For Alpha, Beta, Dev, Test and Production) # # # # PLATFORM: AIX, HP-UX, Linux, Solaris # # # # PURPOSE: Script to custom log additional compaction information. # # # # REVISED LIST: # # DATE: FEB, 17 2019 # # BY: Shashi Yebbare # # MODIFICATION: Added custom encoder pattern # # # # # # set -n # Uncomment to check your syntax, without execution. # # # NOTE: Do not forget to put the comment back in or # # # the shell script will not execute! # # # ################################################################################## --> <configuration debug="true"> <appender name="STDERR" class="ch.qos.logback.core.FileAppender"> <file>"/Users/shashi/Sites/author/support/SD_Compaction.log"</file> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="org.apache.jackrabbit.oak.plugins.segment.Compactor" level="DEBUG"/> <root level="warn"> <appender-ref ref="STDERR" /> </root> </configuration>