`
zhaoshijie
  • 浏览: 2259890 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux下进程管理利器—supervise(监控并将死掉的程序重启)

阅读更多
关键字:Linux下进程管理利器—supervise(监控并将死掉的程序重启)


supervise:系统进程监控管理器 

可参考的文章(参考这篇文章可安装成功):
1、linux 安装supervise服务 :http://blog.csdn.net/xvshu/article/details/51792668
2、注意:run脚本没有任何后缀
一、工具supervise

Daemontools是一个包含了很多管理Unix服务的工具的软件包。其中最核心的工具是supervise,它的功能是监控一个指定的服务,当该服务进程消亡,则重新启动该进程。而要添加让supervise监控的服务非常容易,只需要添加一个被监控的服务的目录,在该目录中添加启动服务器的名字为run的脚本文件即可。
其中svscan工具是为指定的工作目录(缺省是/service/目录)下的所有子目录中的每一个子目录都启动一个supervise进程,最多可以启动多达1000个supervise进程(也就是工作目录下可以有多达1000个子目录)。其中每个子目录下都会有一个名为run的用来启动对应服务的脚本程序。Supervise会监控该服务,在服务消亡时使用run脚本来自动启动该服务。若svscan的工作目录下的子目录的sticky位被置位,则svscan将为该子目录启动两个supervise进程,一个监控子目录中的run对应的服务,另外一个监控子目录下的log子目录的记录服务,两者之间通过管道来相互联系。
Svscan每5秒钟检测一次子目录,若出现新的目录则为该目录启动supervise,若某个老的子目录对应的supervise退出,则重新启动它。
该软件包的所有工具的详细信息请参考在线文档。daemontools最经典的搭配是和lighttpd一起使用

二、安装

  /pacakage目录(你可以创建任意目录,这里使用package只是为了保持与英文作者的一致):  
  mkdir -p /package
  chmod 1755 /package
  cd /package

  下载daemontools-0.76.tar.gz到/package目录,解压该包。

http://cr.yp.to/daemontools/daemontools-0.76.tar.gz  


  tar xvzf daemontools-0.76.tar.gz
  cd admin/daemontools-0.76

  编译并安装daemontools程序
  
  package/install

【注意】:如果在安装过程中出现安装失败的提示,是因为daemontools 需要一个补丁daemontools-0.76.errno.patch,这个补丁在qmail包中有。或者修改daemontools 源代码来修补这个bug

(修改方法:在src下的conf-cc文件的第一行最后添加如下代码即可 -include /usr/include/errno.h

# vi src/conf-cc

在最后加上 -include /usr/include/errno.h



如果安装成功,你可以用下面命令确认:

# ps -ef | grep svscan
# man svscan

此时你查看一下inittab文件:
# cat /etc/inittab

会发现原来daemontools是使用init的方式来保护自己的:

SV:123456:respawn:/command/svscanboot

通过strace命令你能看到系统每隔五秒会核对一下服务:
# strace -p `pidof svscan`


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

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

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

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

五、1)例子1

  假定已经安装好daemontools,建立一个test目录,进入该目录
  
  mkdir /temp1
  cd /temp1

  在该目录下写一个简单测试程序test.c:  

  编译test.c输出为test。  
  gcc -o test test1.c

  编写一个脚本run,来执行test程序,以便supervise进行调用。 

  

#!/bin/sh  

echo "start test!"  

./test

  退到上级目录,执行 supervise temp1看看效果:
  
  cd ..
  supervise temp1

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

C代码 复制代码 收藏代码

    #include
    #include   
    int main(){
    int ix = 0; 
    for(;; ix++){  
    printf("%d\n", ix);
    sleep(1); 
    } 
    return 0; 
    }

注意:当停止再次启动supervise监控某目录时,会提示:

supervise: fatal: unable to acquire /service/test/supervise/lock: temporary failure

这时删除目录下的supervise重新监控即可。

2)例子2 (java)

命令: mkdir /service/test

cd /service/test

ll

vi demo.java

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

Xml代码 复制代码 收藏代码

    #!/bin/sh
    echo -e "start test";
    exec java demo

chmod +x run

执行监控目录 :supervise /service/test

[终端打印出来标号]

再开启一个终端,查看正在执行这个命令的进程id,执行 ps -A

找到 java这个进程的id号,

执行 killall -9 java

看前一个终端,是不是打印又从新开始了,呵呵。这说明中断之后supervise又启动这个进程了

3)例子3

mkdir /tmp/test

cd /tmp/test

vi demo.java

[代码同例子2]

javac -d . demo.java

vi run

Java代码 复制代码 收藏代码

    #!/bin/sh
    echo -e "start test2";
    exec java -classpath /tmp/test demo

chmod +x run

ln -s /tmp/test /service/test

ll /service

supervise /service/test

发现开始打印了,这时在另一个终端执行 killall -9 java ,则发现这个终端的打印又从新开始了,也就是杀掉进程之后立即又从新执行run了

4)实例4 监控tomcat启动

假如tomcat 在redhat的 /var/tomcat6

在/service目录下新建一个run文件,内容如下:
Java代码 复制代码 收藏代码

    #!/bin/sh
    TOMCAT_HOME=/var/tomcat6
    exec ${TOMCAT_HOME}/bin/catalina.sh run

执行supervise /service

则发现tomcat启动了。

测试: 新打开一个终端,ps -ef |grep tomcat

找到tomcat的id,执行 kill -9 [tid]

杀掉了tomcat但在之前的终端窗口上却显示重新启动了tomcat。

【注】:好像用tomcat的./shutdown.sh命令不能使监控重启,出现异常,端口占用,可能是还没等tomcat关闭监控就执行了启动命令。

参考资料:1)官网:http://cr.yp.to/daemontools.html
分享到:
评论

相关推荐

    Linux操作下的进程管理利器 Supervise

    标题提到的"Linux操作下的进程管理利器 Supervisord"是指一个强大的Python编写的进程管理工具,它可以帮助用户管理和控制多个后台进程,确保服务的稳定性和可靠性。Supervisord不仅支持启动、停止、重启进程,还具备...

    supervise绿色版解压可用

    它通过创建一个控制目录来监控指定的程序,一旦程序崩溃或非正常退出,控制目录中的状态文件会被修改,`supervise` 将据此判断并执行重启操作。 `supervise` 的优势在于其简单、高效和可靠的特性。它不需要复杂的...

    supervise 二进制文件

    supervise 二进制文件,运行命令 ./supervise -f 要守护的程序 -p 守护信息存储位置

    PyPI 官网下载 | supervise_api-0.6.0.tar.gz

    这个压缩包包含了一个名为"supervise_api"的Python库的版本0.6.0,通过这个库,开发者可以更方便地在分布式环境中管理和监控他们的应用程序。 "supervise_api"这个名字暗示了它的主要功能可能与进程管理、服务监控...

    线程监控工具V0.0.2 发布-[王博毅]

    线程监控工具V0.0.2是一款专为IT专业人士设计的应用,由王博毅开发,旨在帮助用户实时监控和管理计算机上的进程。这个工具具备高效且实用的功能,能够确保系统稳定运行,防止因进程异常结束导致的问题。下面将详细...

    supervise:使用现代Linux功能的最小的非特权流程主管

    您可以使用`supervise'包裹一个子进程,这又会派生出更多的子进程,并以任意配置和深度将它们包裹在`supervise'中。行为当执行监督时,它期望具有stdin,stdout和stderr。 进一步希望监督者已经启动了一些子进程...

    window-supervise-client.rar_视频服务器_视频监控

    和linux下视频服务器交互,实时监控,此工程在windows下SDL显示。

    Python库 | supervise_api-0.5.0.tar.gz

    总的来说,`supervise_api-0.5.0.tar.gz`是一个针对API管理和监控的Python库,它可能包含了一系列方便开发者测试、调试和优化API的工具。在实际开发中,熟悉并有效利用这样的库可以极大地提高API项目的质量和效率。...

    qmail在Linux,Solaris系统安装详解

    安装完成后,别忘了启动和配置相关服务,如使用daemontools的`supervise`来监控qmail和其他依赖的服务。同时,根据需求设置好邮件路由、虚拟域用户、Web邮件访问等高级功能。 总之,安装qmail及其配套软件是一项...

    实时日志监控系统.docx

    对于Agent的高可用,通过Supervise方式启动Agent,保证进程异常时能立即重启。同时,对Agent进行存活监控,一旦发现Agent挂掉,立即报警。RocketMQ、JStorm和HBase作为分布式系统,本身就具备高可用性和可扩展性,...

    heartbeat3

    Heartbeat的主要任务是监控系统服务的状态,并在主节点发生故障时自动将服务切换到备用节点,以确保关键业务的连续性。 在Linux系统中实现双机集群,heartbeat3扮演着核心角色。它通过在网络中发送心跳信号来检测...

    基于alpine系统构建docker镜像,实现可配置和易于管理的docker镜像

    基于alpine系统构建docker镜像,实现可配置和易于管理的docker镜像。 项目简介 提供非常小的docker镜像。 提供易于配置的docker镜像。 提供非常稳定的docker镜像。 使用docker镜像快速启用微服务架构。 使用docker...

    daemontools-0.76

    3 supervise->监控一个服务。它在发现目标服务dies的时候启动服务或重启服务器。创建一个新服务的监控非常简单,创建一个目录,并且在此目录下写一个名称为'run'的脚本,在这个脚本里定义启动目标服务的命令即可。 4...

    桌面快捷方式管理工具

    压缩包内的文件“Supervise Desktop Mini.EXE”很可能就是这款桌面快捷方式管理工具的可执行程序,用户运行这个文件就可以启动并使用该工具。而“飘荡软件.url”则可能是一个指向该软件官方网站或下载页面的快捷链接...

    图标管理 图标管理器

    【图标管理】是一种系统工具,主要用于管理和组织计算机桌面上的各种图标。图标是用户与操作系统交互的重要元素,它们代表了各种程序、文件、快捷方式等。图标管理器则可以帮助用户更有效地整理这些图标,提高桌面的...

    daemontools控制脚本

    Daemontools是一套小型工具集,用于管理和监控Linux下的后台进程(即守护进程)。它提供了一种简单且可靠的方式来启动、停止以及监控各种服务。在本案例中,Daemontools被用来管理Qmail邮件服务器的相关服务。 ####...

    supervise_learning

    标题“supervise_learning”直指这一主题,暗示我们将深入探讨监督学习的基本原理、类型、算法以及在实际应用中的作用。 监督学习的核心在于学习过程中的“监督”,它通过已知的输入-输出对(也称为特征-标签对)...

    spark-submit工具参数说明.pdf

    15. **--supervise**:如果开启,当Driver程序失败时,Spark Standalone模式会尝试重启它。 16. **--total-executor-cores NUM**:仅在Spark Standalone或Spark on Mesos模式下,指定所有executor的总核心数。 17....

Global site tag (gtag.js) - Google Analytics