|
|
在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
& ?4 @$ G5 P2 M2 b 利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
. {4 m8 M5 M+ a4 @" d, c: b0 z7 U实例讲解:
9 o% f. [& C" C+ b, f) _, M: N' g6 z首先ssh登录你的vps1 ~ Q& e. f& @; |( k
输入命令:crontab -e+ ]: ]# o( D. V2 P% F
/ W2 l1 Q2 h5 w, i: H出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
% e# X* j; i5 o7 V0 V1 [* l+ Y( N; ^. g/ e
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
F$ u2 J9 X0 X4 ]7 M9 Z9 j" @% ~代表每3小时执行一次/www/web/目录下的restart_on_502.sh
2 i' r0 D+ S8 w" ?, v然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
, l5 R& V: c @ q! K# P( \表示进入了不可编辑状态可以输入命令,这是我们输入:wq
0 `- f0 V) O* d- w% K程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
- a" @& u' @4 u2 s4 F就能看到我们编辑的定时任务了。7 [: `9 ~+ T* [9 W3 ^
0 O* o6 M$ F) T; M; l; G0 W. ]# X
502.sh脚本内容:% s; z( B8 K6 ?! n1 R3 D: |( T3 H
. c# T+ c+ D4 ?! O
#!/bin/bash0 }; B; D) F9 K: W2 a
#by admin@cm8.org. g6 R$ Q. ^, R- o. s! p7 A! _
MY_URL=http://www.funjan.com
: U) z0 ~6 b Y- z7 TRESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
6 g, y; A7 Z: o l0 yif [ -n "$RESULT" ]; then
m& E8 j1 e% [& H/ b0 l7 H' e #如果502则会执行这里的内容,随便加或改
3 |) R, E3 u3 c6 O #reboot
/ O! T- ~$ m% V8 H7 @ #...
! L' b5 E8 w( P! N! L# M0 d# l0 Y /etc/rc.d/init.d/nginxd restart) Z, n8 b- x0 K5 e' G- y& a7 ^
/etc/rc.d/init.d/nginxd start
- N4 Q9 H# Z1 H- w; ofi- r! q4 P6 R. e/ ]$ I! }
5 D8 V' |$ f1 X+ u, {* B
将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了7 K7 m. V( _1 H2 ?1 E7 {% O: Q
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。4 v6 s7 _- ~( A
D) Z* L$ O" g9 E! e* Z+ I/ s. V
扩展阅读:
. G: I h, O+ z: t* A系统cron设定:/etc/crontab: Z8 Y) y. Z) f8 i+ U9 {: H: _3 Q
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
- c% @* u) v2 w7 v ]SHELL=/bin/bash2 y' M- X4 v1 w- G/ Q' o4 R5 {
PATH=/sbin:/bin:/usr/sbin:/usr/bin
) d$ E6 K' u9 Q) PMAILTO=root
; @+ Y" A+ E3 c, T3 i4 O( _% k( i" QHOME=/' ^0 z7 m" H$ L$ _: Q/ s4 ?
# run-parts3 L" q i, b2 \; R5 ^
01 * * * * root run-parts /etc/cron.hourly
2 }; T9 u" N' | J02 4 * * * root run-parts /etc/cron.daily
% X3 [$ C9 K2 e3 B% p# F c9 p22 4 * * 0 root run-parts /etc/cron.weekly$ ?6 X3 I. l: A
42 4 1 * * root run-parts /etc/cron.monthly) ~. P0 p9 I7 }- f& R" \
6 F6 B+ h* g8 l" h4 s以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
: ^! j* e* l( R6 Z2 ]1 z* k: R4 b1 N真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:4 M6 [6 [* O# Y/ p; q) p) V
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。, g X& C! I: ~2 z: D! S
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。3 E- Z. H; A, i; |8 L k8 P6 i& n: o
第三部分,为需要执行的完整命令。
8 W- m: |- K1 G/ [: g第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
0 C7 s6 E" f7 q0 7 * * * root mpg123 ~/wakeup.mp3
# }7 a4 {* g" s分 时 日 月 周- L3 J' e; W: a) M
星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
& `8 _3 z" R [: B+ z. O以下是各部分的取之范围:) T6 C; P2 W/ ?7 ^; c3 h: y
分钟 0~59 $ u7 d7 @* l4 |+ m. h: C
小时 0~23
# E2 E. w! m& i3 O1 L5 H" r 日期 1~31 ) l5 }- ~6 T" K; C
月份 1~12
9 c1 E1 r: A& _3 X3 l/ Q N周 0~6
1 T6 H" H! K- E$ J3 ]" G. q其中周的范围0~6,0代表星期天,1~6代表周一~周六。( D' E$ e! y _! O
让我们来看更多的例子:
- {4 `$ s+ V8 y) O0 }" c3 S8 q0 4 * * 0 root emerge --sync && emerge -uD world #每周日凌晨4点,更新系统
$ ~. V# G) `# G7 x% Q1 Z0 2 1 * * root rm -f /tmp/* #每月1号凌晨2点,清理/tmp下的文件
% ]* ^' Q+ J+ q' R/ x: x6 i0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日给robin发信祝他生日快乐
! J9 W; |" i, d4 z" u; Y/ H假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:5 w' L7 `/ t/ _# _
*/2 * * * * root ............... #每两分钟就执行........( e/ g) b ^! d
0 6,12,18 * * * root ............... #每天6点、12点、18点执行........
+ B& W4 ~% b" S$ J& H! r V1 B用户的cron: crontab命令/ G/ _" d, _( F' X# a
上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
0 S8 q/ k& E9 M% F首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
- ~% J+ l2 r% d* x, ? Z; e# gpasswd -a galeki cron
8 g# g9 N! w( W% @' @$ m! ecrontab命令主要有3个参数:7 L* [- _7 u$ `1 J/ C
-e : 编辑用户的crontab。% y# U& A }8 V, C
-l : 列出用户的crontab的内容。
) N. F8 Z& H$ H a9 D/ c-r : 删除用户的crontab的内容。# n% H" Q4 _# F$ `! L9 X$ z! s2 M/ Q
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
2 @: Z( K8 J; ccrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。% O$ k# f/ O7 I
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|