|
|
在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
4 }, U, ^# X) R 利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
6 N6 ?7 ^! a8 b0 q' E. G, o实例讲解:
8 R1 l8 N% M; _- C4 n/ z首先ssh登录你的vps
) {7 g: a ], U) y* g输入命令:crontab -e
4 e/ @% B2 I& d3 {! j9 {( x$ `3 m- F; b
出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成( G* G, C2 ~8 V8 k" w8 h% l* }
: T1 i% T* |2 T ~
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh S; t- @: x4 D/ K1 x
代表每3小时执行一次/www/web/目录下的restart_on_502.sh! X0 R) y2 H5 u: E) Y: t0 T9 }
然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
% D0 D' G9 ^2 X6 A- P4 \% ^表示进入了不可编辑状态可以输入命令,这是我们输入:wq3 r7 @4 E% p0 I$ f7 P4 x) I' Q
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l l- l# c4 `7 t4 y% R% A7 } m
就能看到我们编辑的定时任务了。
/ {8 z9 s. m7 M6 N# x: D# j3 H- {) Y* q5 Z& N' |! o
502.sh脚本内容:4 `) J/ ~* y' V, s
3 u# G. j+ V5 T7 U6 ]2 P9 P
#!/bin/bash
; X- x, p/ Q( L; u3 [/ C1 u5 _#by admin@cm8.org
' m7 G' r" ~7 {" ?0 M9 X% S0 ^MY_URL=http://www.funjan.com* | s$ a2 M+ q4 L! B% o/ ~$ O# O
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`2 u" n! a+ O9 G! t% D; h& D
if [ -n "$RESULT" ]; then9 t. ^" l: Y4 x; ]" f
#如果502则会执行这里的内容,随便加或改$ Z4 D" g% o2 n
#reboot& @: S+ g' x- }) j
#...3 z3 Q1 C: S6 I! f5 K# L: o( c: k- I d9 A
/etc/rc.d/init.d/nginxd restart8 R+ {) l3 L. h/ u; ], V6 O3 q. e7 d( D2 B/ ]
/etc/rc.d/init.d/nginxd start
4 J: T8 m, F* v3 Mfi$ R: k# Z& k7 _! Y5 E9 `1 n0 r
+ o; U% w0 Y4 O8 y3 _& E3 h将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
7 {; p! Y/ S p. l$ S" D4 M然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
7 T" w$ ?* z9 j K% F# A9 p% y: ]1 Z) D: F* B( C, ^3 x
扩展阅读:
; ^4 O! E9 s: z: z系统cron设定:/etc/crontab
! d4 _$ Q8 R# ~) P2 G6 m* S通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。$ ~' |; e' d, \) l
SHELL=/bin/bash
$ e! q( V( T4 O$ D0 XPATH=/sbin:/bin:/usr/sbin:/usr/bin
- @6 r+ L) m' K; b7 T9 a6 h% D" i6 hMAILTO=root
: y3 n- a. G4 I5 K: e$ @HOME=/% p C- m& q5 k K3 C; c# Q
# run-parts$ k* o8 V7 ~- P6 j/ I" G# Y) {
01 * * * * root run-parts /etc/cron.hourly
$ T) s, k' ?6 J# ]6 P+ D# t02 4 * * * root run-parts /etc/cron.daily
. s0 x1 l, `2 h4 O8 c" E22 4 * * 0 root run-parts /etc/cron.weekly) B7 e1 j- s" [& @: N' K
42 4 1 * * root run-parts /etc/cron.monthly
# n) h/ r4 [6 ^6 h2 X( m# J9 b( x/ a8 {8 i
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。0 R7 F4 w( b+ n( T
真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
' H- D1 z+ ^1 c& |8 ?" x第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。3 k/ E2 J% p/ T6 {! _. F. r7 V; ?
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
& N9 b$ p7 w0 u, Z2 Z第三部分,为需要执行的完整命令。1 ]' ] Z+ u9 S# m
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
0 u0 H+ Z- g. v+ ^0 L+ d' I0 7 * * * root mpg123 ~/wakeup.mp3 2 y1 C5 T" L5 G3 m2 Q
分 时 日 月 周
& B7 Q0 x+ R' ]( ]8 a- i' e: _星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~! j7 h+ u: h- E% m1 w
以下是各部分的取之范围:( E- |3 k/ q: ~% p
分钟 0~59 ; ~% C4 z, n2 o- A' M$ J
小时 0~23 / A! \" [% ]( R2 \' f* s6 S+ u; C
日期 1~31 ' H. q' s' s. M) `
月份 1~12 8 a3 l* i. {7 ]3 k
周 0~6 % j* U8 \ O# e! U2 ]8 W
其中周的范围0~6,0代表星期天,1~6代表周一~周六。; ]+ k% L! J, D. _( p+ O! Y, W$ R
让我们来看更多的例子:
, L5 x/ T# W1 b. p4 P5 B0 s; A4 [0 4 * * 0 root emerge --sync && emerge -uD world #每周日凌晨4点,更新系统
# x; e0 r# K3 P- n+ s( d* |0 2 1 * * root rm -f /tmp/* #每月1号凌晨2点,清理/tmp下的文件
' f+ ~* h# K8 ]- w6 m4 w6 @0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日给robin发信祝他生日快乐
8 [, e' {/ J- A0 M假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:
8 }. b3 M( Y" O; d: e" O+ |% s*/2 * * * * root ............... #每两分钟就执行........* M/ A" w$ X* R: P9 X& Q
0 6,12,18 * * * root ............... #每天6点、12点、18点执行........
' K/ l& B. O3 b7 ] y/ s& o/ u4 {2 J, l用户的cron: crontab命令
8 G4 M' V! E* Y, b; }: Q上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
, M+ w! h1 O& L. W" G; |3 w3 A* D首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:( K: m) K, r' |* l
# gpasswd -a galeki cron' V& u) C! P8 p& _1 q) _9 I
crontab命令主要有3个参数:" p. e9 f8 J; A# R: K A. c0 | K2 B5 B$ B
-e : 编辑用户的crontab。
w7 }- Y N0 s2 }0 s* h-l : 列出用户的crontab的内容。
% C8 W( J% n' v# x4 P( Y, b-r : 删除用户的crontab的内容。
6 |5 P7 ?! }( D3 ?- H5 P执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。6 Q- ], K) V$ Y5 D6 I: V# e
crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。# O2 A" c% u2 @# |: _7 D' x4 |
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|