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 ,很是奇怪。
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 ,很是奇怪。
相关文章推荐
- 初识Linux
- Linux内核学习(二)---Linux中的进程、线程和轻量级进程
- linux openssl漏洞
- linux crontab 定时执行计划命令
- linux字符设备内核源码
- linux关于文件共享
- linux之nm命令
- Linux的SOCKET编程详解
- 【CentOS 6.5】解决QtCreator 安装时错误: 无法解析dbus_connection_can_send_type中的符号"dbus_connection_can_send_type"
- linux telnet端口号修改
- Linux mount命令于的基本用法与umount的命令
- linux每个路由表的系统研究
- 应该知道的Linux技巧
- Linux进程查看,管理工具
- linux下pgsql安装步骤
- Linux 修改文件属性
- 在Linux下使用RAID(四):创建RAID 5
- 在Linux下使用RAID(三):用两块磁盘创建RAID 1
- 在Linux下使用RAID(二):使用mdadm工具创建软件RAID 0(1)
- Linux之间的文件共享