定时检查进程

#!/bin/bash
#TIME=18:32
#while [ 1 -eq 1 ]
#do
#TMP=`date +'%H:%M'`
#echo $TMP $TIME
#if [ "$TMP" = "$TIME" ]
#then
#echo "时间到了,开始执行程序"
#break
#fi
#sleep 1
#done
lryDir=/settle1/card2/script/lry
echo "每隔5分钟检查一次进程"
lrynow=`date +%Y%m%d`
if [ -f $lryDir/Log/log_check_$lrynow ]
then
echo "文件已经存在,采用追加方式"
>> $lryDir/Log/log_check_$lrynow
echo "`date +%T` :文件已经存在,采用追加方式" | tee -a $lryDir/Log/log_check_$lrynow
else
> $lryDir/Log/log_check_$lrynow
echo "`date +%T` :新建日志文件log_check_$lrynow" | tee -a $lryDir/Log/log_check_$lrynow
fi
echo "每隔5分钟检查一次进程" |tee -a $lryDir/Log/log_check_$lrynow
TIME=0900
checkcard_ps()
{
checkps=$1
if [ $checkps = Standserver ]
then
echo "`date +%T` : 当前进程为:$checkps"
fi
status=`pscard | grep $checkps | wc -l`
#echo $status
if [ $status == 0 ]
then
echo "`date +%T`的时候:$checkps进程挂掉了,准备运行$checkps" | tee -a $lryDir/Log/log_check_$lrynow
cd /settle1/card2/bin
nohup $checkps &
echo $?
if [ $? -eq 0 ]
then
echo "`date +%T`时候:程序$checkps启动成功" | tee -a $lryDir/Log/log_check_$lrynow
sleep 60
if [ $checkps = Standserver ]
then
echo "!!!!!!`date +%T`时候:准备修改配置文件" | tee -a $lryDir/Log/log_check_$lrynow
cat /settle1/card2/script/lry/lryconfig > /settle1/card2/bin/config.ini
echo "!!!!!!`date +%T`时候:配置文件修改完毕" | tee -a $lryDir/Log/log_check_$lrynow
fi
fi
sleep 5
else
echo "`date +%T` : $checkps正常运行"
sleep 1
fi
}
echo "`date +%T` : $lrynow开始执行检查进程程序" | tee -a $lryDir/Log/log_check_$lrynow
while [ 1 -eq 1 ]
do
TMP=`date +'%H%M'`
for lryps in SettleAgent Standserver Cardcollect Statserver Import Billserver osagent Msgserver
do
echo "$lryps"
checkcard_ps $lryps
done
echo "`date +%T` : 检查完毕"
echo $TMP
echo $TIME
if [ "$TMP" -gt "$TIME" ]
then
echo "`date +%T` : 时间到了,退出程序" | tee -a $lryDir/Log/log_check_$lrynow
break
fi
sleep 291
done

 

 

 

 

--------------------------------------------

----------------------------------------------

http://hi.baidu.com/hy0kl/blog/item/476d719000389380a977a4d3.html

 

 

 

2010-7-9 修正版:

#!/bin/sh
#check memcache process and restart if down

mm_bin="/usr/local/bin/memcached"
mm_log="/home/xxx/memcached_check.log"
mm_ports=("11211" "11212")
mm_param=("-d -m 20480 -p 11211 -u www" "-d -m 256 -p 11212 -u www")
mm_count=${#mm_ports[@]}

t=$(date -d "today" +"%Y-%m-%d %H:%M:%S")
i=0
while [ $i -lt $mm_count ]
do
mm_exists=`ps -ef|grep "memcached"|grep "${mm_ports[$i]}"|grep -v grep|wc -l`

if [ "$mm_exists" == "0" ]; then
${mm_bin} ${mm_param[$i]} 2>&1 > /dev/null &
echo "${t} : ${mm_bin} ${mm_param[$i]}" >> ${mm_log}
fi

let i++
done

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

添加为自动执行:
    #crontab -e
*/10 * * * * /bin/sh /home/xxx/memcached_check.sh


系统每10分钟会自动执行memcached_check.sh

-------------------------------------------------------------
备用shell语句:

#检查mysql状态
PORT=`netstat -na | grep "LISTEN" | grep "3306" | awk '{print $4}' | awk -F. '{print $2}'`
if [ "$PORT" -eq "3306" ]

#检查mysql占CPU负载
mysql_cpu=`top -U root -b -n 1 | grep mysql | awk '{print $10}'|awk -F. '{print $1}'`
#如果mysql cpu负载大于80,则重启mysql
if [ "$mysql_cpu" -ge "80" ]

#获得相关信息
ps -ef|grep "memcached"|grep -v "grep"|wc -l
ps -ef|grep "memcached"|grep "11211"|grep -v "grep"|wc -l
ps aux|grep "memcached"|grep -v "grep"|awk '{sum+=$4;n++};END{print sum}'
ps aux|grep "memcached"|grep -v "grep"|awk '{printf $1}'

MYPORT=`netstat -na|grep "tcp"|grep "3306"| awk -F[:" "]+ '{print $5}'`
HAPORT=`netstat -na|grep "udp"|grep "694"|awk -F[:" "]+ '{print $5}'`
PING=`ping -c 5 www.linuxtone.org|awk -F, '/packets/{print $3}'|cut -c 2-|awk '{print $1}'`
DB1IP=`ifconfig eth0|awk '/inet/{print $2}'|cut -c 6-`

----------------------------------------------------------------------------
shell if语句的一些资料:
–b 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-f 当file存在并且是正规文件时返回真
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 当file存在文件大小大于0时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。

UNIX Shell 里面比较字符写法:
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
-z 空串
= 两个字符相等
!= 两个字符不等
-n 非空串

------------------------------------------------------------
crontab 的一些资料:

基本格式:
*  *  *  *  *  command
分  时 日  月  周  命令


第1列表示分钟1~59 每分钟用 * 或 */1 表示,*/10表示每10分钟
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

 

 

 

-------------------------------------------------------------------------------------------------------------------

http://magicmind.iteye.com/blog/411771

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值