#! /bin/bash max_age=10 max_mails=10 log_lines=50 cur=`date +%s` since=$(($cur - $max_age * 60)) echo "Apache error log" echo "================" tail -n $log_lines /var/log/apache2/error_log | perl -MDateTime::Format::Strptime -F';' -ane ' my $parser = DateTime::Format::Strptime->new( pattern => "%a %b %d %H:%M:%S.%N %Y" ); my $formater = DateTime::Format::Strptime->new( pattern => "%s" ); if (/^\[([^]]+)\]/) { $last = $formater->format_datetime($parser->parse_datetime($1)); } elsif ($last !~ /\d+/) { $last = 0; } print "$last $_\n"; ' | awk "{ if (\$1 > $since) print \$0 }" | cut -d ' ' -f 2- echo echo mails=`mailutil check | cut -d ' ' -f 6` if [ "$mails" == "in" ]; then mails=`mailutil check | cut -d ' ' -f 4` fi if [ $mails -gt 0 ]; then [ $mails -gt $max_mails ] && mails=$max_mails cur=`date -u +%s` for id in `seq $mails -1 1`; do mail=$(($mails - $id + 1)) lastmail=`echo "type $mail" | mailx -R "" -N` dt=`echo "$lastmail" | grep "From" | head -n 1 | cut -d ' ' -f 3-` last=`date -u --date "$dt" +%s` since=$((($cur - $last) / 60)) if [ $since -le $max_age ]; then echo "Cron reports on$dt" echo "========================================" echo "$lastmail" | sed -e '1,/^$/d' | head -n 10 echo echo fi done fi