centos6.5进程监控

centos6.5进程监控

最近后台服务部署后由于第三方提供的算法库总是莫名崩掉且暂时还不能找到原因,所以直接使用进程监控来保证服务在崩掉后能及时重启。

supervise工具

supervise是Daemontools里的一个核心工具,supervise的功能是监控一个指定的服务,当该服务进程消亡,则重新启动该进程。而要添加让supervise监控的服务非常容易,只需要添加一个被监控的服务的目录,在该目录中添加启动服务器的名字为run的脚本文件即可。

安装supervise

安装daemontools即可将supervise及其配套的工具一起安装,步骤如下:

  • mkdir -p /package //创建一个文件夹
  • chmod 1755 /package //给文件夹改权限
  • cd /package //进入这个文件夹
  • wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz //使用wget命令下载daemontools到当前目录下
  • gunzip daemontools-0.76.tar
  • tar -xpf daemontools-0.76.tar //这两步解压daemontools
  • rm -f daemontools-0.76.tar //删除安装包
  • cd admin/daemontools-0.76/ //进入到安装文件夹中
  • vi src/conf-cc //编辑src/conf-cc文件防止在后续安装过程中报错
  • 在gcc开头的一行的最后面空一格添加 -include /usr/include/errno.h
  • package/install //安装
  • cat /etc/inittab //查看inittab,在其中可以看到这一行:SV:123456:respawn:/command/svscanboot was appended.
  • 注意:原文中介绍的加入开机启动的方法在centos6.5中已经失效,如果同学们重启之后daemontools没有启动的话就说明失效了,使用svstat 服务目录来查看服务是否启动。我们使用新的方法:
  • 删除 /etc/iinittab中刚才添加的那一行: SV:123456: respawn… ,因为没有用
  • cd /etc/init
  • vi svscan.conf 创建一个名叫svscan.conf的新文件
  • 在其中加入
    start on runlevel [345]
    respawn
    exec /command/svscanboot
  • 然后让init重新加载配置,并且开始svscanboot就可以了
  • initctl reload-configuration
  • initctl start svscan

使用supervise程序进行程序管理监控

supervise的执行命令是supervise Path ,其中Path 是指定路径,可以是相对路径,也可以是绝对路径。在Path路径下,必须有一个run的脚本,supervise调用的就是这个脚本,并监控管理该脚本中运行的程序。

supervise的一个重要的功能就是可以检测出run脚本中执行的程序是否正常工作,若发现其已经死掉,supervise将会重新执行run脚本,重新启动指定程序。这对于很多服务端程序来说是十分必要的,没有人愿意在深夜2点的时候从被窝里爬出来重新启动服务器。

下面是简单使用supervise的例子。

例1(java):

假定已经安装好daemontools,在任意目录下建立一个test目录并进入该目录

mkdir test 
cd test
vi demo.java

demo.java内容:

class demo{  
        public static void main(String[] args) throws Exception{  
                for(int i=0;;i++){  
                        System.out.println("i="+i);  
                        Thread.sleep(1000);  
                }  
        }  
}  
javac -d . demo.java
vi run

run文件内容:

#!/bin/sh  
  
echo -e "start test";  
exec java demo  
// 这里将run文件读写权限开放,如果保险起见可以将test目录及其内文件都设为777权限,否则启动过程可能出现access denied错误
chmod 777 run 

执行监控目录 :supervise test
执行killall -9 test,杀死test进程,你会发现supervise会重新启动test进程。当然如果程序core dump,supervise同样会重新启动程序

例2(jar包):

在任意目录下建立一个test目录并进入该目录,在其中放入需要执行的jar包 test.jar,建立run文件:

vi run

run:
注意这里不要将输出重定向到自定义文件,例如:exec java -jar ./test.jar >test.txt & ,这样可能会导致错误。重定向输出可以在启动supervise的时候做,效果也是一样的。

#!/bin/sh
echo "start supervise test"
exec java -jar ./test.jar

注意更改文件权限:

chmod 777 run
chmod 777 test.jar

回到上级目录,启动supervise:

cd ..
#nohup supervise ./test  >suptestLog.txt  2>&1 &
nohup supervise ./test  >test/suptestLog.txt  &

完成,执行killall -9 test,杀死test进程,你会发现supervise会重新启动test进程。当然如果程序core dump,supervise同样会重新启动程序

参考:
supervise系统进程监控
利用进程管理利器supervise监控并自动重启进程
supervise:系统进程监控管理器
在CentOS 6.4上安装daemontools(守护进程工具)
centos7安装supervisor详细教程
Linux操作下的进程管理利器 Supervise
supervise进程管理利器

你可能感兴趣的:(服务器)