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