= Linux/Bash/CpuLoadAvg = == cron job to capture load average == * script to call from cron * cron {{{ * * * * * /home//cron-log-cpu.sh /home//cpu_usage.log }} * bash script cron-log-cpu.sh {{{ #!/usr/bin/bash log_file="${1:-${HOME}/cpu_usage.log}" if [[ $( awk '{ print ($1 > 2.0) }' /proc/loadavg ) -eq 1 ]]; then ( echo; date -Is; top -b -n1 -c -w | head -n 12 | grep -v "^$" ) >> ${log_file} else # Check if last update as Low loadave in last hour, should start with date if [[ -f ${log_file} ]] && tail -n 1 ${log_file} | grep -q "^$( date -Is | cut -c1-13)" > /dev/null; then : else echo echo "$( date -Is ) Low loadavg 1,5,15min $( cat /proc/loadavg )" >> ${log_file} fi fi }}} * Log top 5 process by cpu if loadavg > 3, every minute. * Can remove echo after "||" to not log low load avg. * crontab -e {{{ * * * * * [[ $( echo "$(awk '{ print $1 }' /proc/loadavg) > 3" |bc ) -eq 1 ]] && ( echo; date -Is; top -b -n1 -c -w | head -n 12 ) >> ~/cpu_usage.log || echo "$( date -Is ) Low loadavg 1,5,15min $( cat /proc/loadavg )" >> ~/cpu_usage.log }}} * 2nd version using if else {{{ * * * * * if (( $( awk '{ print ($1 > 3.0) }' /proc/loadavg ) )); then ( echo; date -Is; top -b -n1 -c -w | head -n 12 ) >> ~/cpu_usage.log; else echo "$( date -Is ) Low loadavg 1,5,15min $( cat /proc/loadavg )" >> ~/cpu_usage.log; fi }}} * view with {{{ tail -f ~/cpu_usage.log }}}