Solved

Sun Solaris Unix Shell script that adds 2 to a string numeric and checks last value for changes

Posted on 2009-05-09
6
861 Views
Last Modified: 2013-12-27
Question: Currently our Sun E450 could detect room temperature ie ambient (from
 "prtdiag -v" and I've observed that it's consistently reporting about 2 Celsius lower
 than the general DC room temperature :

# prtdiag -v | grep -i ambie
AMBIENT    19

"date" command in this Solaris 8 box's format is :
# date
Sat May  9 06:06:58 SGT 2009


I'll need a Shell script that run every 1 minute (I'll put this into the crontab as
* * * * * /path/script_name) that will do the following :

I'll need this Shell script to be able to notify/email me when AMBIENT is :
(>= 21  AND there's a change from the reading one minute ago)   OR
(<= 20  AND the temperature recorded one minute ago is >= 21)

Above script basically notifies me once only (not repeatedly) when temperature
hits 21 C  but if temperature keep going up (at levels above 21 C) it will keep emailing/
notifying me.

This script only notify me once when temperature go below 21 C (but only notify
once and not repeatedly and it will stop notifying if room temperature stays below
20 C)

the script in pseudo codes :

Currentdatetime=yyyymmdd:hhmm   (24 hr format)
echo RoomTemp + " " + Currentdatetime  >> yyyymmdd_outputfile
add 2 to the value given by "prtdiag -v | grep AMBIENT" (call this variable RoomTemp
  if RoomTemp equals or exceeds 21
    check RoomTemp vs last_temperature recorded in last line of yyyymmdd_outputfile
        if RoomTemp equal or exceed 21 AND is higher than last_temperature
           email to myemail the value Currentdatetime+" "+":Room temp is now "+RoomTemp
        endif
  if last_temperature in last line of yyyymmdd_outputfile >= 21 and RoomTemp is <=20
    email to myemail the value Currentdatetime+" "+":Room temp now is down to "+RoomTemp
  endif
exit
0
Comment
Question by:sunhux
  • 3
  • 2
6 Comments
 
LVL 9

Assisted Solution

by:svs
svs earned 40 total points
ID: 24344133
Wouldn't a $(your favorite monitoring software) work better that one-off script?

I'd use cfengine to pester me with warnings.
0
 

Author Comment

by:sunhux
ID: 24344460
I'm not allowed to install freeware and if this software costs something, I'll
have to purchase it which is difficult in our budget-conscious environment
0
 
LVL 4

Accepted Solution

by:
ewest02 earned 350 total points
ID: 24344595
Here is a rough and untested script... do to it as you will...

#/bin/sh

myemail_addr="admin@foobar.com"

outfile="`/usr/bin/date +%Y%M%D`.log"

# Get the current temp and adjust....
curTmp=`prtdiag -v |grep AMBIENT| sed -e 's/.*AMBIENT[  ]*\([0-9]*\).*/\1/'`
curtmp=`expr $curtmp + 2`

# Get the last temp.
if [ -f outfile ]  ; then
     prevTmp=`tail -1 outfile|sed -e 's/^\([0-9]*\) .*/\1/'`
else
    touch ${outfile}
    prevTmp=0
fi

#
# record temperature
#
echo "${curTmp} `/usr/bin/date +%Y%M%D:%R`" >> ${outfile}

#
# email as necessary...
if [ ${curtmp} -eq ${prevTmp} ] ; then
    exit 0
fi

if [ ${curTmp} -eq 21 -a ${curTmp} -gt ${prevTmp} ] ; then
        msg="Warning: temperature is 21"
elif [ ${curTmp} -gt 21 -a ${curTmp} -gt {prevTmp} ] ; then
        msg="Warning: temperature is increasing (${prevTmp -> ${curTmp})
elif [ ${curTmp} -lt 21 -a ${prevTmp} -ge 21 ] ; then
        msg="Temperature is done to ${curTmp}"
else
        exit 0
fi

echo "${msg}" |mail -s "Temp alert" ${myemail_addr}
exit 0

0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:sunhux
ID: 24449685


Think there's a problem with outfile :

# outfile="`/usr/bin/date +%Y%M%D`.log"
# echo $outfile
20092705/22/09.log

as the script gave following error when run using "ksh -v scriptname" :

>ksh -v chktemp.sh
ORACLE_HOME=`awk -F":" '/^[a-zA-Z]/{print $2}' /etc/oratab|head -1`
LD_LIBRARYPATH=$ORACLE_HOME/lib
MANPATH=/usr/perl5/man:/usr/bin/man:/usr/man:/opt/hpnpl/man
export PATH=/usr/bin:/usr/sbin:/usr/local/bin:/usr/platform/SUNW,Ultra-4/sbin:\
/opt/netque/pse:$ORACLE_HOME/bin:.\
:/opt/hpnpl/bin:/opt/hpnpl/admin:/usr/lib/osa/bin:/usr/openwin/bin:/opt/VRTSvmsa/bin:/usr/lib\
  ORACLE_HOME MANPATH
[ -f /adm/remote_oracle/bin/proc ] && export PATH=$PATH:/adm/remote_oracle/bin
HOSTNAME=`/usr/bin/hostname`
export PS1='$HOSTNAME:$PWD >'
export UDTBIN=/usr/ud52/bin UDTHOME=/usr/ud52
alias bdump_prodcts='cd /oracle/product/8.1.7/admin/prodcts/bdump'
alias bdump_prodgbr='cd /oracle/product/8.1.7/admin/prodgbr/bdump'
alias bdump_prodldau='cd /oracle/product/8.1.7/admin/prodldau/bdump'
alias arch_prodcts='cd /oracle/archive/prodcts'
alias arch_prodgbr='cd /oracle/archive/prodgbr'
alias arch_prodldau='cd /oracle/archive/prodldau'
alias prtdiag='/usr/platform/sun4u/sbin/prtdiag'
alias jetadmin='cd /opt/hpnpl/admin/;jetadmin'
alias enstall='cd /opt/netque/pse;enstall -m'
set -o vi
sqlplus ()
{
echo $*
export oracle_sid=$ORACLE_SID
su - oracle -c "export ORACLE_SID=$oracle_sid;sqlplus $*"
}
#/bin/sh

myemail_addr="goh_pit_ong@sla.gov.sg"

outfile="`/usr/bin/date +%Y%M%D`.log"

# Get the current temp and adjust....
curTmp=`prtdiag -v |grep AMBIENT| sed -e 's/.*AMBIENT[  ]*\([0-9]*\).*/\1/'`
curtmp=`expr $curtmp + 2`
expr: syntax error

# Get the last temp.
if [ -f outfile ]  ; then
     prevTmp=`tail -1 outfile|sed -e 's/^\([0-9]*\) .*/\1/'`
else
    touch ${outfile}
    prevTmp=0
fi
touch: 20092805/22/09.log cannot create

#
# record temperature
#
echo "${curTmp} `/usr/bin/date +%Y%M%D:%R`" >> ${outfile}
chktemp.sh[22]: 20092805/22/09.log: cannot create

#
# email as necessary...
if [ ${curtmp} -eq ${prevTmp} ] ; then
    exit 0
fi
chktemp.sh[26]: test: argument expected

if [ ${curTmp} -eq 21 -a ${curTmp} -gt ${prevTmp} ] ; then
        msg="Warning: temperature is 21"
elif [ ${curTmp} -gt 21 -a ${curTmp} -gt {prevTmp} ] ; then
        msg="Warning: temperature is increasing (${prevTmp -> ${curTmp})"
elif [ ${curTmp} -lt 21 -a ${prevTmp} -ge 21 ] ; then
        msg="Temperature is done to ${curTmp}"
else
        exit 0
fi
chktemp.sh[32]: {prevTmp}: syntax error
0
 

Author Comment

by:sunhux
ID: 24449695
Even after I've hardcoded as follows, got another error :
outfile="/tmp/a.a"

# ksh -v chktemp.sh
ORACLE_HOME=`awk -F":" '/^[a-zA-Z]/{print $2}' /etc/oratab|head -1`
LD_LIBRARYPATH=$ORACLE_HOME/lib
MANPATH=/usr/perl5/man:/usr/bin/man:/usr/man:/opt/hpnpl/man
export PATH=/usr/bin:/usr/sbin:/usr/local/bin:/usr/platform/SUNW,Ultra-4/sbin:\
/opt/netque/pse:$ORACLE_HOME/bin:.\
:/opt/hpnpl/bin:/opt/hpnpl/admin:/usr/lib/osa/bin:/usr/openwin/bin:/opt/VRTSvmsa/bin:/usr/lib\
  ORACLE_HOME MANPATH
[ -f /adm/remote_oracle/bin/proc ] && export PATH=$PATH:/adm/remote_oracle/bin
HOSTNAME=`/usr/bin/hostname`
export PS1='$HOSTNAME:$PWD >'
export UDTBIN=/usr/ud52/bin UDTHOME=/usr/ud52
alias bdump_prodcts='cd /oracle/product/8.1.7/admin/prodcts/bdump'
alias bdump_prodgbr='cd /oracle/product/8.1.7/admin/prodgbr/bdump'
alias bdump_prodldau='cd /oracle/product/8.1.7/admin/prodldau/bdump'
alias arch_prodcts='cd /oracle/archive/prodcts'
alias arch_prodgbr='cd /oracle/archive/prodgbr'
alias arch_prodldau='cd /oracle/archive/prodldau'
alias prtdiag='/usr/platform/sun4u/sbin/prtdiag'
alias jetadmin='cd /opt/hpnpl/admin/;jetadmin'
alias enstall='cd /opt/netque/pse;enstall -m'
set -o vi
sqlplus ()
{
echo $*
export oracle_sid=$ORACLE_SID
su - oracle -c "export ORACLE_SID=$oracle_sid;sqlplus $*"
}
#/bin/sh

myemail_addr="goh_pit_ong@sla.gov.sg"

# outfile="`/usr/bin/date +%Y%M%D`.log"
outfile="/tmp/a.a"


# Get the current temp and adjust....
curTmp=`prtdiag -v |grep AMBIENT| sed -e 's/.*AMBIENT[  ]*\([0-9]*\).*/\1/'`
curtmp=`expr $curtmp + 2`
expr: syntax error

# Get the last temp.
if [ -f outfile ]  ; then
     prevTmp=`tail -1 outfile|sed -e 's/^\([0-9]*\) .*/\1/'`
else
    touch ${outfile}
    prevTmp=0
fi

#
# record temperature
#
echo "${curTmp} `/usr/bin/date +%Y%M%D:%R`" >> ${outfile}

#
# email as necessary...
if [ ${curtmp} -eq ${prevTmp} ] ; then
    exit 0
fi
chktemp.sh[28]: test: argument expected

if [ ${curTmp} -eq 21 -a ${curTmp} -gt ${prevTmp} ] ; then
        msg="Warning: temperature is 21"
elif [ ${curTmp} -gt 21 -a ${curTmp} -gt {prevTmp} ] ; then
        msg="Warning: temperature is increasing (${prevTmp -> ${curTmp})"
elif [ ${curTmp} -lt 21 -a ${prevTmp} -ge 21 ] ; then
        msg="Temperature is done to ${curTmp}"
else
        exit 0
fi
chktemp.sh[34]: {prevTmp}: syntax error


0
 
LVL 4

Assisted Solution

by:ewest02
ewest02 earned 350 total points
ID: 24458321
curtmp=`expr $curtmp + 2`
expr: syntax error

Did you mean:

curTmp=`expr ${curTmp} + 2`
expr: syntax error

With respect to the log file creation error: did you have permission to create that file? Note that filename created with date command

                 outfile="`/usr/bin/date +%Y%M%D`.log"

 is not fully qualified (eg no leading path) and will be created in the current working directory.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When you do backups in the Solaris Operating System, the file system must be inactive. Otherwise, the output may be inconsistent. A file system is inactive when it's unmounted or it's write-locked by the operating system. Although the fssnap utility…
Using libpcap/Jpcap to capture and send packets on Solaris version (10/11) Library used: 1.      Libpcap (http://www.tcpdump.org) Version 1.2 2.      Jpcap(http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/index.html) Version 0.6 Prerequisite: 1.      GCC …
Learn how to get help with Linux/Unix bash shell commands. Use help to read help documents for built in bash shell commands.: Use man to interface with the online reference manuals for shell commands.: Use man to search man pages for unknown command…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:

790 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question