|
|
在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。 ?5 R0 X( ~* Z0 x4 {* j( B2 n
利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq! p9 a6 E2 |6 D
实例讲解:
6 H1 F) ]. E, z5 v首先ssh登录你的vps
( `! y) I/ R) M# N( w; `) X2 v输入命令:crontab -e% A7 f8 j; O# c. p _8 {" I
/ z' G; C: R6 t6 k4 A7 |出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成% m% P6 n* J) `7 T2 i9 s# k
& U! k& [, l& w, S, c
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh! s; l& l& B2 a$ } Q1 O
代表每3小时执行一次/www/web/目录下的restart_on_502.sh
@% `( `6 l2 I% b6 |- N然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
/ s6 W5 @, X' l: z) a: s表示进入了不可编辑状态可以输入命令,这是我们输入:wq" Q" ]. v& i' s( j: d
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l% x- V6 _( |" P7 C
就能看到我们编辑的定时任务了。
1 p6 O! O" ~+ e* n# J# ~6 F3 [9 w( Y) f6 f, x
502.sh脚本内容:
5 z9 \# I G3 k: ^7 f. _( c: K; V6 e$ @# @* L0 Y8 i
#!/bin/bash( P$ l) o0 ^. ?) ?1 G F V+ G
#by admin@cm8.org
: K |' f! L K# b0 H8 NMY_URL=http://www.funjan.com# _8 v4 j" X+ g# F& `( }; i
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
" X) s( Z$ s: x7 l/ Cif [ -n "$RESULT" ]; then: ?$ n3 l3 z2 U6 g1 H: ~) x9 V
#如果502则会执行这里的内容,随便加或改, j4 d! }# {( M& k0 U. V/ r
#reboot' X+ _! Z' U, ?1 M1 j$ d
#...
. S" ^0 A" q. {/ B /etc/rc.d/init.d/nginxd restart5 T8 |4 S9 \( n* Y1 S, v8 Z, i( I
/etc/rc.d/init.d/nginxd start
+ x$ C7 _2 `3 C' }7 F) K6 l% Yfi
$ Z& A: ~* v; _' z! f; ~
" N. n, v- u8 {- r5 B将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
: J2 Y/ D' p3 X- c4 w; [+ L然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。) w5 T( R1 H8 `) ?4 [. p8 g
7 V2 |& n3 i9 ]
扩展阅读:) R# @+ |+ u- Y+ K: @
系统cron设定:/etc/crontab+ A1 I7 e# \& o& \
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。" I- p2 d8 {" L) u0 M4 w, U
SHELL=/bin/bash4 l* {8 A5 S/ o
PATH=/sbin:/bin:/usr/sbin:/usr/bin
( g7 W, e; V! G# C1 y7 ~MAILTO=root
' V3 S7 z5 }. } I8 w$ RHOME=/
% f+ U: }2 d) ^# run-parts
0 {- J2 `; w' M6 J5 X) J {: Q01 * * * * root run-parts /etc/cron.hourly! c2 X8 ~( s1 Y/ l" y" `( a. o
02 4 * * * root run-parts /etc/cron.daily
, e$ n% ^ `7 G8 ]! b( @7 i/ p f22 4 * * 0 root run-parts /etc/cron.weekly% a) `4 ?) N8 z* Z3 J
42 4 1 * * root run-parts /etc/cron.monthly
5 C, T/ u; E$ I- a9 Y% D' E t0 r3 V: G. E- d7 A# h. q8 H
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。. z2 {3 P0 w* W1 p
真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:8 E$ g4 ?# s9 A$ R% E6 P, x" Z9 w" H
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
: h8 \, X! Q+ `第二部分,上面的文件全部是 "root",描述了执行任务时的用户。2 V9 L9 Z" L# S" ]0 R6 P! P% f
第三部分,为需要执行的完整命令。6 F7 O2 b, ~& y5 E5 |6 Z9 [2 S/ E
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
. H9 b E4 b, k9 d" j' e0 7 * * * root mpg123 ~/wakeup.mp3 9 s1 W( |7 R3 f) k& K
分 时 日 月 周
# a7 c- _- @ E$ D o6 L s星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
2 t% }) C! b2 q8 @ y以下是各部分的取之范围:
8 X9 N& w T7 s# ~/ L 分钟 0~59 9 w- d' ~5 E& j$ D, q9 C0 L8 O8 a
小时 0~23 $ F5 O! N9 Z# N: y3 Q) o& g. m
日期 1~31 g, Q$ ]1 A l( v+ K: B0 Z6 B
月份 1~12
, C3 k& n4 ?% r周 0~6 4 U* C m% a- i
其中周的范围0~6,0代表星期天,1~6代表周一~周六。
& A2 y* y6 ?3 t1 D; i让我们来看更多的例子:
) F I i$ \& f# M0 4 * * 0 root emerge --sync && emerge -uD world #每周日凌晨4点,更新系统
- L+ G* T9 ?+ ~; s R- I; T0 2 1 * * root rm -f /tmp/* #每月1号凌晨2点,清理/tmp下的文件9 A( q( }6 D8 `& j/ b% X6 ?# ]
0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日给robin发信祝他生日快乐) T+ G. @2 g( a7 E7 A/ f7 [2 a
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:
* I. Z" d4 J- x8 {) J, \3 f4 N*/2 * * * * root ............... #每两分钟就执行........
8 k4 j7 S' _) q% m( ]$ V2 A1 L0 6,12,18 * * * root ............... #每天6点、12点、18点执行........
$ B1 Z: j; Z4 G" Y8 D3 ?8 g用户的cron: crontab命令
. {; {, `$ x% B4 \ O f上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。* ]8 x" p# ~3 R# {% K3 g9 }
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
1 u# W" Y. I! G u# t# gpasswd -a galeki cron
9 H7 W4 j! w" E5 y) [$ _crontab命令主要有3个参数:
! g- a" h# ?: O3 ?- S7 |( C-e : 编辑用户的crontab。; \- T2 s8 n% Z2 N; L+ u/ V
-l : 列出用户的crontab的内容。
2 _- s, X' N: `8 a/ P-r : 删除用户的crontab的内容。
" X0 }9 r2 ]" Y5 T6 Y/ A: f \执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
" s# g' i! s Z( ^& ~$ V% n7 acrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。2 \. d2 s* I3 f
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|