Solaris Server dectects EMC dead path and send mail immediately

taus-itcapp1#powermt display dev=all

Pseudo name=emcpower0a

CLARiiON ID=APM00105201788 [Sol_Taus_itcapp1]

Logical device ID=60060160B2202B001094F0E0AF5CE011 [SolDA_Taus_itcapp1_data]

state=alive; policy=CLAROpt; priority=0; queued-IOs=0;

Owner: default=SP A, current=SP A Array failover mode: 1

==============================================================================

--------------- Host --------------- - Stor - -- I/O Path -- -- Stats ---

### HW Path I/O Paths Interf. Mode State Q-IOs Errors

==============================================================================

3072 pci@1d,700000/SUNW,qlc@1/fp@0,0 c3t5006016446E01FEFd0s0 SP A4 active alive 0 0

3072 pci@1d,700000/SUNW,qlc@1/fp@0,0 c3t5006016C46E01FEFd0s0 SP B4 active dead 0 1

3073 pci@1e,600000/SUNW,qlc@3/fp@0,0 c4t5006016546E01FEFd0s0 SP A5 active alive 0 0

3073 pci@1e,600000/SUNW,qlc@3/fp@0,0 c4t5006016D46E01FEFd0s0 SP B5 active dead 0 1

The script is running every 10 mins to detect the ECM dead path ( see above) and sendind an email only when it detect the dead paths

The simple way is
10,20,30,40,50,59 * * * * /ect/powermt display dev=all|awk '{print $7}' |grep -i dead |mail orafup@mymail.com <---work perfect when there is a dead path

and the script

#!/bin/sh 
MYMAIL="orafup@mymail.com"
powermt display dev=all|awk '{print $7}' |grep -i dead|mail $MYMAIL
exit

the problem is there is no subject with the "mail" but if i am using the "mailx -s" , it will deliver a blank email even if there is no dead path detection.

I am trying to add an argument into the script but it seems not working 

#!/bin/sh
HOSTNAME=`uname -a`
EMCSTATUS=`powermt display dev=all|awk '{print $7}' |grep -i dead
MYMAIL="orafup@mymail.com"
TEMPF=/tmp/prog$$
powermt display dev=all|awk '{print $7}' |grep -i dead |wc -l >$TEMPF
if [ ($TEMPF) -ne 0 ]
  then 
 echo " there is the dead path "
else 
  :
fi
mailx -s "Please check $HOSTNAME of $EMCSTATUS" $MYMAIL
exit

Please help me out.
Thanks!

#!/bin/sh
HOSTNAME=`uname -n`;MYMAIL='yourmail@yourdomain';TEMPF=/tmp/prog$$
powermt display dev=all|awk '/Pseudo name/{print substr($0,13,length($0))}'|
while read -r dev;do if [[ $(powermt display dev=$dev|grep -i dead) ]] ; then
powermt display dev=$dev>$TEMPF;mailx -s "There is a dead path(s) at the '$dev' device in $HOSTNAME" $MYMAIL<$TEMPF
fi; done
#!/bin/sh
HOSTNAME=`uname -n`;MYMAIL='yourmail@yourdomain';TEMPF=/tmp/prog$$
powermt display dev=all|awk '/Pseudo name/{print substr($0,13,length($0))}'|
while read -r dev;do if [[ $(powermt display dev=$dev|grep -i dead) ]] ; then
powermt display dev=$dev>$TEMPF;mailx -s "There is a dead path(s) at the '$dev' device in $HOSTNAME" $MYMAIL<$TEMPF
fi; done

I like your script . it is good for multi-luns but it dont think it work

#!/bin/sh
HOSTNAME=`uname -n`
MYMAIL="yourmail@yourdomain"
TEMPF=/tmp/prog$$
powermt display dev=all|awk '/Pseudo name/{print substr($0,13,length($0))}'|while read -r dev;
do
  echo $dev
  powermt display dev=$dev|grep -i dead
 if [[ $(powermt display dev=$dev|grep -c dead) -ne 0]] ;
 then
    powermt display dev=$dev>$TEMPF;
   
mailx -s "There is a dead path(s) at the '$dev' device i$HOSTNAME"$MYMAIL<$TEMPF
fi; 
done

but it is still not working. i am to send mail only when there is a dead path(s).
thanks!

How about this?

#!/bin/sh

HOSTNAME=`uname -a`
MYMAIL="orafup@mymail.com"
EMCSTATUS=/tmp/prog$$

powermt display dev=all|awk 'tolower($7)=="dead"'  > $EMCSTATUS

if [ `cat $EMCSTATUS |wc -l` -ne 0 ]
then 
 echo " there is the dead path "
 cat $EMCSTATUS |mailx -s "Please check $HOSTNAME on the dead path" $MYMAIL
 exit
fi

what is error?
i guess you has a typo!
this script already send to mail when matches dead of paths.

i would like to change little bit. Please see below

#!/bin/sh

HOSTNAME=`uname -a`
MYMAIL="orafup@mymail.com"
EMCSTATUS=/tmp/prog$$

powermt display dev=all|awk ' {print $7}'|grep -c dead > $EMCSTATUS

if [ `cat $EMCSTATUS` -ne 0 ]
then 
 echo " there is the dead path "
 cat $EMCSTATUS |mailx -s "Please check $HOSTNAME on the dead path" $MYMAIL
 exit
fi
rm $EMCSTATUS
exit 0

---------- Post updated at 05:17 PM ---------- Previous update was at 05:16 PM ----------

YGEMICI,
It keeps looping , I have to kill it with control D

why do you use the sh ?
you must use

/usr/bin/bash
/bin/bash

.

and firstly glance , there is any error your script maybe except some corrections..
if you get any error with below script then write the output of below comd

powermt display dev=all

re-try this.:wink:

#!/bin/bash
HOSTNAME=`uname -n`
MYMAIL='yourmail@yourdomain'
TEMPF="/tmp/prog$$"
powermt display dev=all|awk '/Pseudo name/{print substr($0,13,length($0))}'|
while read -r dev 
 do 
  if [[ $(powermt display dev=$dev|grep -i dead) ]]
   then
   powermt display dev=$dev>$TEMPF
   mailx -s "There is a dead path(s) at the '$dev' device in $HOSTNAME" $MYMAIL<$TEMPF
  fi
 done

and your code might look like this.

#!/bin/bash
...........
mydeads=$(powermt display dev=all|awk ' {print $7}'|grep -c dead emc)
if [ $mydeads -ne 0 ]
.....
.......

regards
ygemici