我编写了一个shell脚本(Health_app.sh)来检查应用程序的运行状况。为此,它从App_Details文件中获取进程的名称并检查PID(是否正在运行)以及它是否在日志(字段3)中未运行和grep用于该进程并将电子邮件发送到提到的电子邮件ID在App_Details文件中(字段4)。
App_Details有以下记录:
PROCESS_NAME | Process_description | logfile_path |电子邮件
abcd |主程序来调用 dataready|/123/456/log|vikas@yahoo.com
PQRS |第二 过程.......................... |/123/456/log|vikas@yahoo.com
以下是我的脚本的样子:
export App_Details=/home/123/sanity/App_Details
while read line
do
export procname=$(echo $line | cut -d " " -f1)
export PROCDES=$(echo $line | cut -d " " -f2)
#if ps -ef |grep [`echo $procname|awk '{print substr($0,1,1)}'`] [`echo $procname|awk '{print substr($0,2,length($0))}'`]> /dev/null
if ps -ef |grep -q [`echo $procname|awk '{print substr($0,1,1)}'`] `echo $procname|awk '{print substr($0,2,length($0))}'`
then
export part1=[`echo $procname|awk '{print substr($0,1,1)}'`]
export part2=`echo $procname|awk '{print substr($0,2,length($0))}'`
export PROCID=`ps -ef |grep $part1$part2|awk -F ' ' '{print $2}'`
else
export PROCID="OFFLINE"
trace_path=$(echo $line | cut -d " " -f3)
export mail=$(echo $line | cut -d " " -f4)
file_name=`ls -rt $trace_path/$procname*.trc 2>/dev/null | tail -1`
#export PROCDES=$(echo `tail -10 $file_name`)
(echo `tail -10 $file_name`) >> send.txt
mailx -s "Please find the alerts for your application OFFLINE services" vikas@domain.com < send.txt
fi
echo $PROCID|awk '{ printf("%-20s", $0)}'
echo $procname|awk '{ printf("%-20s", $0)}'
echo $PROCDES|awk '{ printf("%-20s\n", $0)}'
done<$App_Details
现在问题是grep -q
对于solaris是非法的,并且它在solaris服务器中不起作用。