#!/bin/bash # Just die if not root. if [ ${UID} -ne 0 ]; then echo "FATAL: Need to run as root." exit 1 fi # Shutdown handler. trap_shutdown() { echo "Shutting down..." exit 0 } trap trap_shutdown SIGHUP SIGINT SIGQUIT SIGABRT SIGTERM # Announce collection period. PERIOD=10 if [ -n "$1" ]; then PERIOD=$1 fi REPORT_LENGTH=$((2 * PERIOD - 1)) echo "Collecting and reporting system activity statistics every ${PERIOD} seconds..." # Clean up /var/log/sa on startup if so requested. case ${STARTUP_SCRATCH:-0} in 1|yes|true) echo "Removing existing SA1 data due to scratch-on-startup being ${STARTUP_SCRATCH}..." rm -f /var/log/sa/sa* ;; *) echo "Skipping scratch-on-startup..." ;; esac # Add a record of rotation to existing logs if so requested. case ${STARTUP_ROTATE:-0} in 1|yes|true) echo "Marking existing SA1 data as rotated due to rotate-on-startup being ${STARTUP_ROTATE}..." /usr/lib64/sa/sa1 --rotate ;; *) echo "Skipping rotate-on-startup..." ;; esac # Mark a reboot. /usr/lib64/sa/sa1 --boot # Remember the hour-of-day. PREV_HOUR="$(date +%H)" # Do the loop. while [ 1 ]; do # Start sa1. /usr/lib64/sa/sa1 ${PERIOD} 1 # Produce the report. REPORT_FROM=$(date +%H:%M:%S -d "${REPORT_LENGTH} seconds ago") REPORT_UNTIL=$(date +%H:%M:%S) /usr/bin/sadf -s ${REPORT_FROM} -e ${REPORT_UNTIL} -j -- -A > /var/log/sa/sysstat-dump.json # Have we awoken in a new day? Rotation record, please! NEW_HOUR="$(date +%H)" if [ ${NEW_HOUR} -lt ${PREV_HOUR} ]; then echo "Marking last saXX as rotated..." /usr/lib64/sa/sa1 --rotate # TODO: remove the old file fi PREV_HOUR=${NEW_HOUR} sleep ${PERIOD} done # End of entrypoint-sysstat.sh