linux中监控进程 自动重启



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 ,很是奇怪。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值