您的位置:首页 > 运维架构 > Linux

linux中监控进程 自动重启

2015-09-16 20:44 681 查看

1. 以下是监控tomcat进程,如果 java进程挂了,自动重启。

linux-13:/home/monitor # more mobileserver.sh

#!/bin/bash

source setpath.sh

file_name="/home/monitor/mobileserver.log"

if pgrep java >>/dev/null

then

echo "mobileserver is normal " >> $file_name

else

echo $(date +%Y-%m-%d' '%H:%M:%S)" mobileserver is not running, 开始启动 mobileserver " >> $file_name

cd /home/zhou/apache-tomcat-7.0.61/bin

./startup.sh

fi

注意: 脚本中引用了 setpath.sh ,该文件是 机器的环境变量。比如:

linux-13:/home/monitor # more setpath.sh

!#/bin/bash

#export PATH=$PATH:/home/apache-maven-3.3.1/bin

export JAVA_HOME=/usr/java/jdk1.7.0_79

export JRE_HOME=/usr/java/jdk1.7.0_79/jre

export JAVA_BIN=/usr/java/jdk1.7.0_79/bin

export ANT_HOME=/home/apache-ant-1.7.1

PATH=/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/home/apache-maven-3.3.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin

:/usr/games:/us

r/lib/mit/bin:/usr/lib/mit/sbin:/home/svn/svnnew/bin:/home/apache-maven-3.3.1/bin:/usr/java/jdk1.7.0_79/bin:/home/apache-ant-1.7.1/b

in:/home/AutoTe

st/autoCompile/adt-bundle-linux-x86_64-20140702/sdk/tools:/home/AutoTest/autoCompile/adt-bundle-linux-x86_64-20140702/sdk/platform-t

ools

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME JAVA_BIN PATH CLASSPATH

如果不引用机器的环境变量, tomcat可能重启不起来, 因为 tomcat的启动脚本 startup.sh 是 mobileserver.sh 这个脚本的子进程,startup.sh 的执行环境并没有引入操作系统的环境变量,会导致 setup.sh 中的命令不可用。

最后加上一个定时任务,每分钟执行一次:

linux-13:/home/monitor # crontab -l

*/1 * * * * cd /home/monitor/ && bash mobileserver.sh

2. 另一个脚本:

linux-04:/home/monitor # more mon_tigase_2.sh

#! /bin/bash

#source setpath.sh

proc_name="tigase-server" # 进程名

file_name="/home/monitor/tigase.log" # 日志文件

pid=0

proc_num() # 计算进程数

{

num=`ps -ef | grep $proc_name | grep -v grep | wc -l`

return $num

}

proc_id() # 进程号

{

pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`

}

proc_num

number=$?

if [ $number -eq 0 ] # 判断进程是否存在

then

cd /home/tigase/tigase-server-7.0.1-b3810

./scripts/tigase.sh start etc/tigase.conf # 重启进程的命令,请相应修改

echo $(date +%Y-%m-%d' '%H:%M:%S)" tigaseserver is not running, 开始启动 tigaseserver " >> $file_name #

重启时间记录

fi

注: 该脚本中的proc_name 需要长一点,我在测试中发现,如果proc_name 太短了,杀掉进程后,单独执行 ps -ef | grep tigase | grep -v grep | wc -l 统计出来的值是 0 ,但是执行 sh -x mon_tigase_2.sh ,打印出来的num确是 2 ,很是奇怪。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: