最近后台服务部署后由于第三方提供的算法库总是莫名崩掉且暂时还不能找到原因,所以直接使用进程监控来保证服务在崩掉后能及时重启。
supervise是Daemontools里的一个核心工具,supervise的功能是监控一个指定的服务,当该服务进程消亡,则重新启动该进程。而要添加让supervise监控的服务非常容易,只需要添加一个被监控的服务的目录,在该目录中添加启动服务器的名字为run的脚本文件即可。
安装daemontools即可将supervise及其配套的工具一起安装,步骤如下:
supervise的执行命令是supervise Path ,其中Path 是指定路径,可以是相对路径,也可以是绝对路径。在Path路径下,必须有一个run的脚本,supervise调用的就是这个脚本,并监控管理该脚本中运行的程序。
supervise的一个重要的功能就是可以检测出run脚本中执行的程序是否正常工作,若发现其已经死掉,supervise将会重新执行run脚本,重新启动指定程序。这对于很多服务端程序来说是十分必要的,没有人愿意在深夜2点的时候从被窝里爬出来重新启动服务器。
下面是简单使用supervise的例子。
假定已经安装好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同样会重新启动程序
在任意目录下建立一个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进程管理利器