无论什么程序都不可能完美无缺,理论上,任何程序都有core dump的一天,正式运营的程序,尤其是服务器程序,一旦core dump,后果不堪设想,有过服务器开发经验的朋友,一定都经历过深夜美梦中,被电话惊醒的惨痛经历,手忙脚乱把服务器重新启动,第二天上班还要被老板一顿狠批。所以,程序发生错误时自动重启变得很重要。这里集中讨论linux实现自动重启程序的方法。
linux下实现程序的自动重启有很多方法,这里我们介绍的是通过自己写脚本来实现,
自动重启脚本
假定需要实现重启的程序名为 test ,我们这里通过判断进程数目来判断程序是否正常。
ps -ef grep "$1" grep -v "grep" wc –l 是获取$1(本例中为test)的进程数,脚本根据进程数来决定下一步的操作。通过一个死循环,每隔1秒检查一次系统中的指定程序的进程数。
代码如下:
脚本check
#!/bin/sh
#-----------------------------------# 函数: checkprocess# 功能: 检查一个进程是否存在# 参数: $1 --- 要检查的进程名称# 返回: 如果存在返回0, 否则返回1.#---------------------------------------checkprocess(){ # 检查输入的参数是否有效 if [ "$1" = "" ]; then return 1 fi #$process_num获取指定进程名的数目,为1返回0,表示正常,不为1返回1,表示有错误,需要重新启动 process_num=`ps -ef grep "$1" grep -v "grep" wc -l` if [ $process_num -eq 1 ]; then return 0 else return 1 fi}
# 检查test实例是否已经存在while [ 1 ] ; do checkprocess "test" checkqq_ret=$? if [ $checkqq_ret -eq 1 ]; then# 杀死所有test进程,可换任意你需要执行的操作 killall -9 test exec ./test & fi sleep 1done
脚本start:
加入limit coredumpsize 102400,设置core file的大小,一旦程序core dump,有迹可寻。在该脚本中后台执行check脚本,可以省去很多麻烦,
#!/bin/cshlimit coredumpsize 102400
./check &
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器