Unix Shell Scripting

Hi All,

Greetings!!

I am trying to write a script that will get me the syslog.log [/var/adm/syslog/syslog.log] file output of last week...
That is ...my cron will run on Monday and will get me the syslog output of previous week , last monday-last sunday.

I tried using date formatting and tail..but did not succeed.

Can you guys help me out in how to write the script.It is a bit urgent,,,:o

Thanks in advance.:b:

What type of system are you using ??
Do you roll you syslog ??

On all the HP-UX systems I help manage, we roll the syslogs each morning ...

[/]# cat /usr/local/bin/movesyslogs.cron
#!/bin/ksh
#==========================================================================
# script:  movesyslogs.cron
#
# Notations:
# dd/mm/yy  Who  Comment...................................................
#
# 04/10/05  JIM  Initial script.
#                Rotates and archives Syslog. mails syslog for checking.
#
#==========================================================================

. $HOME/.profile

SCRIPTUSER=`whoami`


#------------------------------------------------------------------------
# SYSLOG Email.

echo "-----------------------------------------------------"
echo "- MAIL SYSLOG TO OPS_REPORTS - ($OPS_REPORTS)"
echo "-----------------------------------------------------"

#mailx -s "`hostname` syslog report" hp@adomain.com < /var/adm/syslog/syslog.log
cat  /var/adm/syslog/syslog.log | \
      grep -v -e "not reverse" -e "Received disconnect" -e "Connection closed" \
              -e "registrar/tcp: Connection from" | \
      mailx -s "`hostname` syslog report" $OPS_REPORTS
$SCRIPTDIR/movelogs.sh /var/adm/syslog/\*  $SYSLOGARCHIVE

You may have a similar $SYSLOGARCHIVE set up on your system.

Hope this helps some. :slight_smile:

Cheers,
Cam

Hi Cam,,

Thanks a ton...

I am using hp-ux 11.11.... [hp 9000 class servers]
Is the script that you have given something similar to the logrotate.conf script on linux?
What does this exactly do? will i get a week's log file from this?
kindly explain this script please.

thanks.

regards..:slight_smile:

cat  /var/adm/syslog/syslog.log | \
      grep -v -e "not reverse" -e "Received disconnect" -e "Connection closed" \
              -e "registrar/tcp: Connection from" | \
      mailx -s "`hostname` syslog report" $OPS_REPORTS

I'll let you work this out for your own benefit.

The code for $SCRIPTDIR/movelogs.sh ...

/#!/bin/ksh
InTempl=$1
OutTempl=$2
mmmyy=`date +"%b%y"`

find $OutTempl/$mmmyy -type d >> /dev/null 2>&1
if [ $? -ne 0 ]
then
  mkdir $OutTempl/$mmmyy
  chmod 755 $OutTempl/$mmmyy
fi

for File in $(find $InTempl -xdev -prune -depth -type f )
do
    nn=`echo $File | sed "s/\// /g" | wc -w  `
    let nn=nn+1
    OutFile=`echo $File | cut -f $nn -d \/`
    echo From $File to $OutTempl/$mmmyy/$OutFile
    echo ======================================================================\
         >> $OutTempl/$mmmyy/$OutFile
    echo $File `ls -l $File | cut -c 46-57` >> $OutTempl/$mmmyy/$OutFile
    echo ======================================================================\
         >> $OutTempl/$mmmyy/$OutFile
    cat $File >> $OutTempl/$mmmyy/$OutFile
    cat > $File < /dev/null
done

Try to understand what it's doing yourself first, much more fun and you happen to retain what you learn in the process far more easily. If you still have trouble let the forum know.

As for getting a weeks worth, well we keep 13 months worth on disk. It doesn't take that much space.

Hope this is all helpful to you.

Cheers,
Cam

Hi Cam,
Thanks for the support.
I worked out the first code and i got the entire syslog output emailed to the mail id that i provided..but it proved too costly as the file size is >100Gb,,

Second code gives me errors..with find command in line 13..
Usage: find path-list [predicate-list]

Would be grateful if u'll help me sort this.

thanks..

regards