linux下通过脚本实现自动重启
程序
R' L) E5 u0 Y2006-06-01
0 U- J- M; O F5 l
i' ~0 `8 d2 |" j) f
! l2 _+ W$ v Z+ _. `
4 A: v& u( ~2 k6 B( g) r无论什么程序都不可能完美无缺,
理论上,任何程序都有CoreDump的一天,正式运营的程序,尤其是
服务器程序,一旦CoreDump,后果不堪设想,有过服务器开发经验的朋友,一定都经历过深夜美梦中,被
电话惊醒的惨痛经历,手忙脚乱把服务器重新启动,第二天上班还要被老板一顿狠批。所以,程序发生错误时自动重启变得很重要。这里集中讨论
Linux实现自动重启程序的方法。
/ [6 w* R3 u& f. w. S' ?' a5 ^" X( r
1 M9 u" `4 `5 n# t
linux下实现程序的自动重启有很多方法,这里我们介绍的是通过自己写脚本来实现,
: i8 J0 A9 i2 f4 w. c E
5 y4 }3 [$ a6 H! j h自动重启脚本
% R& b9 F7 B1 i' [
1 o% r7 P" f0 {7 g. r假定需要实现重启的程序名为test,我们这里通过判断进程数目来判断程序是否正常。
3 _/ I5 x: U: b+ V- q/ S9 K* @: W$ z9 p% O/ F5 T5 V
ps-ef│grep"$1"│grep-v"grep"│wc–l是获取$1(本例中为test)的进程数,脚本根据进程数来决定下一步的操作。通过一个死循环,每隔1秒检查一次
系统中的指定程序的进程数。
3 Z" w+ H8 P1 o9 m: e: h% l; a* V
$ M6 f. R$ | J% |9 @2 k& n. h/ z代码如下:
" B Q7 v i9 m/ y5 B
脚本check
. p p( b: o8 _3 f6 S; X/ y3 g, q4 X& {3 y Q
7 d! H3 u) x# Z
7 R" B- G) t( b, \7 H* I#!/bin/sh
! U+ D+ S& G8 c& z: C7 q
#-----------------------------------#函数:CheckProcess#
功能:检查一个进程是否存在#参数

1---要检查的进程名称#返回:如果存在返回0,否则返回1.#---------------------------------------CheckProcess(){#检查输入的参数是否有效if["$1"=""];thenreturn1fi#$PROCESS_NUM获取指定进程名的数目,为1返回0,表示正常,不为1返回1,表示有错误,需要重新启动PROCESS_NUM=`ps-ef│grep"$1"│grep-v"grep"│wc-l`if[$PROCESS_NUM-eq1];thenreturn0elsereturn1fi}
; I% n* Y0 L0 S/ I9 a: G4 q
#检查test实例是否已经存在while[1];doCheckProcess"test"CheckQQ_RET=$?if[$CheckQQ_RET-eq1];then#杀死所有test进程,可换任意你需要执行的操作killall-9testexec./test%26fisleep1done
/ |2 {: P" B/ {2 H. o [! L# o2 N' T
v; E: E+ x) Z: ]( w4 \( P ~: |. k9 Z; r0 d* m, b7 a- n. N Y4 t
) ]- G: }: H2 ?7 `- `1 q4 R" E+ e
& h, p! n/ i- y/ \ g6 Q
脚本start:
% T' y: }4 W8 E" i0 G加入limitcoredumpsize102400,设置corefile的大小,一旦程序CoreDump,有迹可寻。在该脚本中后台执行check脚本,可以省去很多麻烦,
1 Z5 f9 v$ R3 I; G1 b
- K6 O3 ?% n" h! l8 q+ S0 _
. A; b9 s ^) j) J" s" g1 x. h
#!/bin/cshlimitcoredumpsize102400
/ [; v$ i; m' ?8 ?' f7 u
./check%26