(如果服务器显示时间如08:14-则打印服务器已启动,但如果服务器显示日期如Nov13-打印服务器未启动并发送警报消息)
#!/bin/ksh
var1="$(ps -ef | grep 'abc' | grep -v 'grep' | tr -s " " | cut -d ' ' -f5)"
var2="$(date "+%H:%M")"
date="$(date "+%b%d")"
if [ "$var1" == "$var2" ]; then
echo "Server has been bounced" > final.txt
echo " Success"
elif expr "$var1" ">" "$var2" >/dev/null; then
echo "Server has been bounced" > final.txt
echo " Success" > final.txt
elif [ "$var1" == "$date" ]; then
echo "Server is not bounced" > final.txt
echo " Failure" > final.txt
mail -s " Failure, Server is not bounced " final.abc@acb.com
fi
我试着用服务器第5列的以下命令获取var1的输出,以检查服务器是否反弹或已启动
var1=echo "ps -ef | grep 'abc' | grep -v 'grep' | tr -s " " | cut -d ' ' -f5"
var1的输出将是日期或时间,这取决于服务器是否被反弹,如果被反弹则显示时间,如果没有则显示日期
var2=echo "date "+%H:%M" "
var2的输出将是今天的时间。
请记住,时间可能不同,也不是实时的,它正在检查,所以如果var1输出显示03:14,而当前时间是05:16,那么还需要显示服务器已启动,我正在尝试使用此
else if expr "$var1" ">" "$var2" >/dev/null
然后这个命令
日期=echo "date "+%b%d" "
日期输出将只是一个类似(Nov15)的格式,如果var1输出将是日期变量的格式,那么必须显示服务器没有反弹,也没有向上
但如果var1的输出将显示02:12这样的时间,则必须与var2的格式进行比较,并显示服务器被弹出并向上
在中间时间脚本被卡住了脚本正在工作,但日期一没有给出输出
通过以下操作,您可以获得自午夜以来的秒数:
$(($(date '+(%H*60+%M)*60+%S')))
在ps
中使用-o etimes
,可以获得自进程运行以来的秒数。如果你知道PID,你可以做:ps -p <pid> -o etimes=
。如果您不知道PID,您可以使用grep
,就像您已经在做的那样:
ps -e -o etimes,command|grep abc|awk '{print $1}'
一旦您有了这两个值,您就可以比较进程运行时间是否大于午夜后的秒数。