#!/bin/ksh
INFORMIXDIR=/u1/informix;export INFORMIXDIR
INFORMIXSERVER=on_shm01;export INFORMIXSERVER
ONCONFIG=onconfig.on_01;export ONCONFIG
DB_LOCALE=zh_cn.gb;export DB_LOCALE
CLIENT_LOCALE=zh_cn.gb;export CLIENT_LOCALE
SERVER_LOCALE=zh_cn.gb;export SERVER_LOCALE
DBLANG=zh_cn.gb;export DBLANG
PATH=$INFORMIXDIR/bin:$PATH;export PATH
DBDATE=Y4MD/;export DBDATE
cd /u1/usr/informix
if [ $# -ne 1 ] ; then
echo "Usage: killidle.sh idletime "
echo "Ex: killidle.sh 1800 "
exit fi
idle=$1
cp kill.log k.log
rm -rf kill.log
now=date | awk '{ print $4 }'
kill_time=date '+%y/%m/%d-%H:%M:%S'
echo "Start killtime:$kill_time"
echo "Start killtime:$kill_time" >>kill.log
#PUM=onstat -u | grep active | awk '{print $1}'
PNUM=w | grep fglrun | wc -l
#if [ PNUM -lt 155 ]; then
# echo "User number less then 155,now is: $PNUM" >>kill.log
# echo "End Kill---------" >>kill.log
# exit
#fi
tsNow=0
hhn=echo $now | cut -d':' -f 1
mmn=echo $now | cut -d':' -f 2
ssn=echo $now | cut -d':' -f 3
tsNow=expr $hhn \* 3600 + $mmn \* 60 + $ssn
ToSec() {
# $1 : readtime
hh1=echo $1 | cut -d':' -f 1
mm1=echo $1 | cut -d':' -f 2
ss1=echo $1 | cut -d':' -f 3
ts1=expr $hh1 \* 3600 + $mm1 \* 60 + $ss1
# $2 : writetime
hh2=echo $2 | cut -d':' -f 1
mm2=echo $2 | cut -d':' -f 2
ss2=echo $2 | cut -d':' -f 3
ts2=expr $hh2 \* 3600 + $mm2 \* 60 + $ss2
if [ ts1 -gt ts2 ] ;
then
ts=expr $tsNow - $ts1
else
ts=expr $tsNow - $ts2
fi
}
ToSes() {
hh3=echo $1 | cut -d':' -f 1
mm3=echo $1 | cut -d':' -f 2
ss3=echo $1 | cut -d':' -f 3
ts3=expr $hh3 \* 3600 + $mm3 \* 60 + $ss3
hh4=echo $2 | cut -d':' -f 1
mm4=echo $2 | cut -d':' -f 2
ss4=echo $2 | cut -d':' -f 3
ts4=expr $hh4 \* 3600 + $mm4 \* 60 + $ss4
if [ ts3 -gt ts4 ] ;
then
ts5=expr $tsNow - $ts3
else
ts5=expr $tsNow - $ts4
fi
}
i=0
cnt=1
p_flag=1
sesID=""
opnetime=""
readtime=""
writetime=""
onstat -g ses > ifx_u.tmp
for f in onstat -g ntt | grep sqlexec | awk '{ print $3,$4,$5,$6 }'
do
i=expr $i + 1
case $i in
1) sesID=$f
;;
2) pentime=$f
;;
3) readtime=$f
;;
4) writetime=$f
if [ $writetime ] ;
then
writetime=$writetime
else
writetime=$readtime
fi
ToSec $readtime $writetime
if [ $ts -gt $idle ] ;
then
echo "$cnt) 进程号:$sesID,读:$readtime,写:$writetime,停滞:$ts,规定:$idle Sec." >>kill.log
while read L1
do
p_flag=1
t_ses=echo $L1 | awk '{ print $1 }'
if [ t_ses -eq sesID ] ;
then
t_uname=echo $L1 | awk '{ print $2 }'
echo "--该进程的用户名: $t_uname" >>kill.log
t_kill=grep $t_uname /u1/usr/informix/no | grep -v grep | wc | awk '{ print $1 }'
if [ t_kill -eq 0 ];
then
echo "----该用户: $t_uname 不在系统保护名单内" >>kill.log
t_pid=echo $L1 | awk '{ print $4 }'
t_pid_no=ps -ef | grep $t_pid | grep -v grep | wc | awk '{ print $1 }'
t_tty=echo $L1 | awk '{ print "pts/",$3 }' | tr -d ' '
s_tty=echo $L1 | awk '{ print $3}'
t_host=echo $L1 | awk '{ print $5 }'
kill_time=date '+%H:%M:%S'
cat ifx_u.tmp | awk '{print $1,$2,$3}' | grep $t_uname > shaun.tmp
echo "------该用户: $t_uname 的系统进程列表为:" >>kill.log
cat ifx_u.tmp | awk '{print $1,$2,$3}' | grep $t_uname >>kill.log
while read L2
do
p_ses=echo $L2 | awk '{ print $1 }'
p_tty=echo $L2 | awk '{ print $3 }'
if [ p_ses -ne t_ses ];
then
echo "--------其他进程号: $p_ses " >>kill.log
onstat -g ntt | grep sqlexec | awk '{ print $3,$4,$5,$6 }' | grep $p_ses >>kill.log
if [ p_tty -eq s_tty ];then
echo "端口相等:p_tty:$p_tty,s_tty:$s_tty" >>kill.log
preadtime=onstat -g ntt | grep sqlexec | awk '{ print $3,$4,$5,$6 }' | grep $p_ses | awk '{print$3}' | tr -d ' '
pwritetime=onstat -g ntt | grep sqlexec | awk '{ print $3,$4,$5,$6 }' | grep $p_ses | awk '{print$4}' | tr -d ' '
ToSes $preadtime $pwritetime
if [ $preadtime ];then
echo preadtime:$preadtime >>kill.log
echo pwritetime:$pwritetime >>kill.log
else
echo "进程时间未取到:$p_ses" >>kill.log
ts5=0
fi
echo "端口号: $p_tty ,停滞: $ts5 ,规定:$idle " >>kill.log
if [ $ts5 -le $idle ];
then
p_flag=0
echo "----------正常使用,系统保留:$t_uname,T_ses:$t_ses,T_pid:$t_pid,T_tty:$t_tty" >>kill.log
continue
fi
else
echo " 端口不相等:p_tty:$p_tty,s_tty:$s_tty ,本次不处理该进程 $p_ses" >>kill.log
fi
fi
done if [ p_flag -eq 1 ];
then
t_kill=grep $t_uname /u1/usr/informix/no | grep -v grep | wc | awk '{ print $1 }'
if [ t_kill -eq 0 ];
then
onmode -z $t_ses
kill -9 $t_pid
echo "----------超时用户,踢出系统:$t_uname,T_ses:$t_ses, T_pid:$t_pid,T_tty:$t_tty" >>kill.log
fi
fi
else
echo "该用户: $t_uname 系统已作保护" >>kill.log
fi #if [ t_kill -eq 0 ];
fi #if [ t_ses -eq sesID ] ;
done cnt=expr $cnt + 1
fi
i=0;;
esac
done
kill_time=date '+%y/%m/%d-%H:%M:%S'
onmode -F
echo "E n d killtime:$kill_time"
echo "E n d killtime:$kill_time" >>kill.log
rm -rf ifx_u.tmp
rm -rf shaun.tmp
rm -rf /var/spool/mail/root
INFORMIXDIR=/u1/informix;export INFORMIXDIR
INFORMIXSERVER=on_shm01;export INFORMIXSERVER
ONCONFIG=onconfig.on_01;export ONCONFIG
DB_LOCALE=zh_cn.gb;export DB_LOCALE
CLIENT_LOCALE=zh_cn.gb;export CLIENT_LOCALE
SERVER_LOCALE=zh_cn.gb;export SERVER_LOCALE
DBLANG=zh_cn.gb;export DBLANG
PATH=$INFORMIXDIR/bin:$PATH;export PATH
DBDATE=Y4MD/;export DBDATE
cd /u1/usr/informix
if [ $# -ne 1 ] ; then
echo "Usage: killidle.sh idletime "
echo "Ex: killidle.sh 1800 "
exit fi
idle=$1
cp kill.log k.log
rm -rf kill.log
now=date | awk '{ print $4 }'
kill_time=date '+%y/%m/%d-%H:%M:%S'
echo "Start killtime:$kill_time"
echo "Start killtime:$kill_time" >>kill.log
#PUM=onstat -u | grep active | awk '{print $1}'
PNUM=w | grep fglrun | wc -l
#if [ PNUM -lt 155 ]; then
# echo "User number less then 155,now is: $PNUM" >>kill.log
# echo "End Kill---------" >>kill.log
# exit
#fi
tsNow=0
hhn=echo $now | cut -d':' -f 1
mmn=echo $now | cut -d':' -f 2
ssn=echo $now | cut -d':' -f 3
tsNow=expr $hhn \* 3600 + $mmn \* 60 + $ssn
ToSec() {
# $1 : readtime
hh1=echo $1 | cut -d':' -f 1
mm1=echo $1 | cut -d':' -f 2
ss1=echo $1 | cut -d':' -f 3
ts1=expr $hh1 \* 3600 + $mm1 \* 60 + $ss1
# $2 : writetime
hh2=echo $2 | cut -d':' -f 1
mm2=echo $2 | cut -d':' -f 2
ss2=echo $2 | cut -d':' -f 3
ts2=expr $hh2 \* 3600 + $mm2 \* 60 + $ss2
if [ ts1 -gt ts2 ] ;
then
ts=expr $tsNow - $ts1
else
ts=expr $tsNow - $ts2
fi
}
ToSes() {
hh3=echo $1 | cut -d':' -f 1
mm3=echo $1 | cut -d':' -f 2
ss3=echo $1 | cut -d':' -f 3
ts3=expr $hh3 \* 3600 + $mm3 \* 60 + $ss3
hh4=echo $2 | cut -d':' -f 1
mm4=echo $2 | cut -d':' -f 2
ss4=echo $2 | cut -d':' -f 3
ts4=expr $hh4 \* 3600 + $mm4 \* 60 + $ss4
if [ ts3 -gt ts4 ] ;
then
ts5=expr $tsNow - $ts3
else
ts5=expr $tsNow - $ts4
fi
}
i=0
cnt=1
p_flag=1
sesID=""
opnetime=""
readtime=""
writetime=""
onstat -g ses > ifx_u.tmp
for f in onstat -g ntt | grep sqlexec | awk '{ print $3,$4,$5,$6 }'
do
i=expr $i + 1
case $i in
1) sesID=$f
;;
2) pentime=$f
;;
3) readtime=$f
;;
4) writetime=$f
if [ $writetime ] ;
then
writetime=$writetime
else
writetime=$readtime
fi
ToSec $readtime $writetime
if [ $ts -gt $idle ] ;
then
echo "$cnt) 进程号:$sesID,读:$readtime,写:$writetime,停滞:$ts,规定:$idle Sec." >>kill.log
while read L1
do
p_flag=1
t_ses=echo $L1 | awk '{ print $1 }'
if [ t_ses -eq sesID ] ;
then
t_uname=echo $L1 | awk '{ print $2 }'
echo "--该进程的用户名: $t_uname" >>kill.log
t_kill=grep $t_uname /u1/usr/informix/no | grep -v grep | wc | awk '{ print $1 }'
if [ t_kill -eq 0 ];
then
echo "----该用户: $t_uname 不在系统保护名单内" >>kill.log
t_pid=echo $L1 | awk '{ print $4 }'
t_pid_no=ps -ef | grep $t_pid | grep -v grep | wc | awk '{ print $1 }'
t_tty=echo $L1 | awk '{ print "pts/",$3 }' | tr -d ' '
s_tty=echo $L1 | awk '{ print $3}'
t_host=echo $L1 | awk '{ print $5 }'
kill_time=date '+%H:%M:%S'
cat ifx_u.tmp | awk '{print $1,$2,$3}' | grep $t_uname > shaun.tmp
echo "------该用户: $t_uname 的系统进程列表为:" >>kill.log
cat ifx_u.tmp | awk '{print $1,$2,$3}' | grep $t_uname >>kill.log
while read L2
do
p_ses=echo $L2 | awk '{ print $1 }'
p_tty=echo $L2 | awk '{ print $3 }'
if [ p_ses -ne t_ses ];
then
echo "--------其他进程号: $p_ses " >>kill.log
onstat -g ntt | grep sqlexec | awk '{ print $3,$4,$5,$6 }' | grep $p_ses >>kill.log
if [ p_tty -eq s_tty ];then
echo "端口相等:p_tty:$p_tty,s_tty:$s_tty" >>kill.log
preadtime=onstat -g ntt | grep sqlexec | awk '{ print $3,$4,$5,$6 }' | grep $p_ses | awk '{print$3}' | tr -d ' '
pwritetime=onstat -g ntt | grep sqlexec | awk '{ print $3,$4,$5,$6 }' | grep $p_ses | awk '{print$4}' | tr -d ' '
ToSes $preadtime $pwritetime
if [ $preadtime ];then
echo preadtime:$preadtime >>kill.log
echo pwritetime:$pwritetime >>kill.log
else
echo "进程时间未取到:$p_ses" >>kill.log
ts5=0
fi
echo "端口号: $p_tty ,停滞: $ts5 ,规定:$idle " >>kill.log
if [ $ts5 -le $idle ];
then
p_flag=0
echo "----------正常使用,系统保留:$t_uname,T_ses:$t_ses,T_pid:$t_pid,T_tty:$t_tty" >>kill.log
continue
fi
else
echo " 端口不相等:p_tty:$p_tty,s_tty:$s_tty ,本次不处理该进程 $p_ses" >>kill.log
fi
fi
done if [ p_flag -eq 1 ];
then
t_kill=grep $t_uname /u1/usr/informix/no | grep -v grep | wc | awk '{ print $1 }'
if [ t_kill -eq 0 ];
then
onmode -z $t_ses
kill -9 $t_pid
echo "----------超时用户,踢出系统:$t_uname,T_ses:$t_ses, T_pid:$t_pid,T_tty:$t_tty" >>kill.log
fi
fi
else
echo "该用户: $t_uname 系统已作保护" >>kill.log
fi #if [ t_kill -eq 0 ];
fi #if [ t_ses -eq sesID ] ;
done cnt=expr $cnt + 1
fi
i=0;;
esac
done
kill_time=date '+%y/%m/%d-%H:%M:%S'
onmode -F
echo "E n d killtime:$kill_time"
echo "E n d killtime:$kill_time" >>kill.log
rm -rf ifx_u.tmp
rm -rf shaun.tmp
rm -rf /var/spool/mail/root
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21634752/viewspace-614059/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21634752/viewspace-614059/