需求:因服务宕,或者服务未启,导致业务出问题,现编写以下脚本,放到各个服务器上,设置定时任务crontab(亦可使用while循环实现,但本脚本未使用)。
脚本如下:
#!/bin/bash
CheckProcess()
{
if [ $1 = "" ];then
return 1
else
PROCESS_NUM=$(ps -ef | grep $1 | grep -v grep|grep -v reload.sh | wc -l)
if [ $PROCESS_NUM -eq 0 ];then
return 1
else
return 0
fi
fi
}
##################################
mysql()
{
CheckProcess mysql
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
/etc/init.d/mysql stop
/etc/init.d/mysql start
fi
}
##################################
nginx()
{
CheckProcess nginx
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
/usr/local/nginx/sbin/nginx –s stop
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
fi
}
################################
zabbix_agentd()
{
CheckProcess zabbix_agentd
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
/smp/zabbix_proxy/sbin/zabbix_agentd -c /smp/zabbix_proxy/etc/zabbix_agentd.conf
fi
}
##################################
karaf()
{
CheckProcess karaf
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
sh /smp/karaf_proxy/bin/start
fi
}
#################################
keepalived()
{
CheckProcess keepalived
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
/etc/init.d/keepalived stop
/etc/init.d/keepalived start
fi
}
#################################
redis()
{
CheckProcess redis
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
ps –ef | grep redis| grep -v grep |awk '{print $2}'|xargs kill 9
/usr/local/redis/src/redis-server /etc/redis/redis9081.conf
/usr/local/redis/src/redis-server /etc/redis/redis9082.conf
/usr/local/redis/src/redis-server /etc/redis/redis9083.conf
fi
}
#################################
fdfs()
{
CheckProcess fdfs
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
ps –ef |grep fdfs| grep -v grep |awk '{print $2}'|xargs kill -9
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
fi
}
#################################
tomcat()
{
CheckProcess tomcat
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
cd /data/tomcat-gmcc-moa/
./bin/shutdown.sh
./bin/startup.sh
fi
}
#################################
h5()
{
CheckProcess message
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
cd /usr/local/service-message/
sh shutdown.sh
sh start.sh
fi
}
#################################
lps()
{
CheckProcess lps
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
ps –ef|grep lps| grep -v grep |awk '{print $2}'|xargs kill -9
/usr/local/sbin/lps -c /etc/lps/lps1281.conf -d
/usr/local/sbin/lps -c /etc/lps/lps1282.conf –d
fi
}
#################################
nps()
{
CheckProcess nps
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
ps –ef|gre nps| grep -v grep |awk '{print $2}'|xargs kill -9
cd /home/rkcloud-nps/ && sh start.sh
fi
}
###################################
api()
{
CheckProcess api
Check_RET=$?
if [ $Check_RET -eq 1 ];
then
cd /home/rkapi/api8000/webapps
sh stop.sh
sh start.sh
cd /home/rkapi/api8001/webapps
sh stop.sh
sh start.sh
fi
}
#################################
other()
{
echo "nothing"
}
#################################
PROCESS_NUM=`ps -ef |grep "$1" | grep -v grep|grep -v reload.sh| wc -l`
if [ $PROCESS_NUM -eq 0 ];then
case $1 in
mysql)
echo "1"
mysql;;
nginx)
echo "1"
nginx;;
zabbix_agentd)
echo "1"
zabbix_agentd;;
karaf)
echo "1"
karaf;;
keepalived)
echo "1"
keepalived;;
redis)
echo "1"
redis;;
fdfs)
echo "1"
fdfs;;
tomcat)
echo "1"
tomcat;;
message)
echo "1"
h5;;
lps)
echo "1"
lps;;
nps)
echo "1"
nps;;
api)
echo "1"
api;;
*)
echo "1"
other;;
esac
else
echo "0"
fi
脚本写完后,将脚本上传到服务器相应位置,如/root/路径下;
2.添加linux计划任务:
1)crontab -e,在里边加入:
/5 * * * sh /root/reload.sh 让该脚本每2分钟执行一次
2)重启crond服务使之生效:
service crond restart
3)查看已添加的计划任务,确保本次添加成功:
crontab -l ,如果可以看到刚才添加的那段话,则证明添加成功。