|
|
在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
, \2 h! n* X$ ?5 w% ]( _ 利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq. f! j6 ?9 ` E w
实例讲解:
+ R% T. Q* A( {) A首先ssh登录你的vps( ] S" o, f( f1 W" H1 e
输入命令:crontab -e. ^5 _9 o0 [' p3 G% I( V! T
8 w% u# r* c g% J/ G4 E0 y( m出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
2 R% w8 B9 M$ _4 f% V
% h l& a) Q' b1 X B, M0 {说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
: u. U5 Z/ k# `; q6 T, J0 K代表每3小时执行一次/www/web/目录下的restart_on_502.sh/ s+ Z3 x/ z8 c
然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --! g ^; U- H/ o4 T1 d* k5 P! H
表示进入了不可编辑状态可以输入命令,这是我们输入:wq
- s+ E- W$ \5 f/ l8 s程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l0 j( n u6 r- D( \6 s9 ?! b" K
就能看到我们编辑的定时任务了。 ^& w' a& U' y: V
9 \# P4 U! x% s7 y. Z
502.sh脚本内容:
6 _( l! ]% ]1 z4 T) v7 M$ u& h! I, ^/ d' s' i# U; b6 J! o# D
#!/bin/bash
' E3 F5 C- G9 L#by admin@cm8.org
; F7 a( E/ \" I8 x+ S. _$ L1 OMY_URL=http://www.funjan.com2 O j* U/ i% `( _
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`3 U) `. C6 s0 q! r7 P: S
if [ -n "$RESULT" ]; then# V8 k9 `$ B6 p9 J9 B
#如果502则会执行这里的内容,随便加或改, \1 \0 I/ }) M7 K5 u V
#reboot
$ V0 ?+ T' n/ n/ T. ~3 h #...' F. m1 \0 g6 Q, j- u: W2 J
/etc/rc.d/init.d/nginxd restart
! l' y5 x! G' s# c7 V+ ^ /etc/rc.d/init.d/nginxd start
1 E |& \9 x. h$ K/ Wfi
$ ^1 U% _1 x# j( v; V/ V& m2 n( C1 p& v& h$ k7 g9 x2 ]' L! Z
将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了" A( m# K- Z3 O) A3 E0 T' M
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
8 g6 s7 X& r1 [
4 w6 ]$ }9 J- `扩展阅读:
" z' F" X: [' P4 N/ r9 C系统cron设定:/etc/crontab
* p! L- B& E% E( e& [通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。0 J' e0 [+ G4 `% K% u4 s( G0 ?
SHELL=/bin/bash
* P! t$ Y# e' ~4 z6 oPATH=/sbin:/bin:/usr/sbin:/usr/bin3 o' K0 s' j' a# S! u0 ~2 Y
MAILTO=root
1 `( B/ T1 E5 Z Q& O h3 b$ m8 ^- LHOME=/
" J: ]( Y* ]& \# run-parts+ l% h$ @4 P6 P j
01 * * * * root run-parts /etc/cron.hourly* k8 ?# O9 F) y, h+ O( \7 B1 N
02 4 * * * root run-parts /etc/cron.daily
^6 F6 H8 @9 _. V22 4 * * 0 root run-parts /etc/cron.weekly) t) @8 A z; n
42 4 1 * * root run-parts /etc/cron.monthly) T. m, D/ s" w, x9 u) ]2 V1 a+ ]
& d' `5 t$ @2 C' Y2 A
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
! r: k3 j5 A6 E% `: X5 P真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
7 c0 _. `1 k8 ^1 K9 y第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。! Y% B: q5 ?$ f/ k$ R
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
8 ~: g9 m$ {$ \* k, R: n第三部分,为需要执行的完整命令。
) |/ d5 H$ \# W* l第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:% I% a7 @' R' j$ P- H% B
0 7 * * * root mpg123 ~/wakeup.mp3 5 @/ g1 W) z! W
分 时 日 月 周
. |: ]. \+ ^" W4 W; R! ^星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~. V2 c$ L6 d+ \* C3 S
以下是各部分的取之范围:1 P) q6 \* z! a% {6 g# Q, C- P0 M
分钟 0~59 ( T+ z8 G5 a& b1 x
小时 0~23 : A$ u; U# \+ C8 A9 G, x
日期 1~31 $ |3 e5 o9 K$ n. g
月份 1~12 . o b% d: G! w
周 0~6 ] L4 M. I" J/ g: ?1 z3 |
其中周的范围0~6,0代表星期天,1~6代表周一~周六。' T# j: s! x* h- X5 p: g8 D
让我们来看更多的例子:
' w' |( ^( R# v& U$ ]0 4 * * 0 root emerge --sync && emerge -uD world #每周日凌晨4点,更新系统+ i% B& D2 [* ~% R
0 2 1 * * root rm -f /tmp/* #每月1号凌晨2点,清理/tmp下的文件
: t# _" }& S3 h) z! k. M0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日给robin发信祝他生日快乐
. U8 F# o$ X5 _' v1 G假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:, O. g$ |4 |# U6 J
*/2 * * * * root ............... #每两分钟就执行........
: Z1 O! K/ D) R1 ^6 x/ c. Q9 Y- B5 C0 6,12,18 * * * root ............... #每天6点、12点、18点执行........: s( {- [: M! v- o4 R6 g# a& ~0 _
用户的cron: crontab命令 N$ y4 j+ P; E1 y f% h7 ]' F+ P8 V
上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
- L% Y4 u% w' x6 R; S7 y$ G: J首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:5 |) C; m4 ?5 u4 L- D0 B
# gpasswd -a galeki cron
0 @" D2 N6 O2 s( Ycrontab命令主要有3个参数:
$ R' P2 u2 g! p2 P, T9 M* L-e : 编辑用户的crontab。
! w& z) z* A" d3 ^2 {-l : 列出用户的crontab的内容。% y( U* o. a5 w5 `: V1 |
-r : 删除用户的crontab的内容。
8 x @. H9 O1 I执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。" T( S4 g* i, l# |
crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
( B- B5 a6 W& a/ `. z |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|