找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 19407|回复: 0

crontab添加命令实现nginx遇到502错误重启服务

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。6 k3 k& C1 V+ }% Z8 w
      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
; m+ K. b, q: X+ ?/ [- p8 C0 Q实例讲解:
1 x' g8 @$ G7 Y: F首先ssh登录你的vps
! C* x. D# c' N+ H" p! c* f8 y4 f输入命令:crontab -e
$ S2 C+ ~2 _% c& h( P
2 V$ m  w5 c2 [) ?* w出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成: q; `1 p' w( v/ M/ t  E

3 t1 N- X/ t. [说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
  ^' H5 w; \. C: _6 a3 \( y代表每3小时执行一次/www/web/目录下的restart_on_502.sh4 K+ M; e1 ^* X2 A$ M- [) v2 B
然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --3 ]8 X! O" W2 r# @3 m
表示进入了不可编辑状态可以输入命令,这是我们输入:wq; L5 q# m  b  A
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l& m: P# e4 {8 h! b
就能看到我们编辑的定时任务了。
8 N6 S: u. v. B$ k
- \" E! X6 }$ V7 N502.sh脚本内容:" k0 d3 {! e* j$ }, Y; h* c6 P

6 o* [# N/ m3 @& u  W- m: P& ^#!/bin/bash7 P- N  y2 m! ^
#by admin@cm8.org9 w5 d" S0 R+ v. R* R" ^( k2 o
MY_URL=http://www.funjan.com
3 s0 B, q; h/ B' a9 o) ?8 [RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
# K8 [$ S6 J+ B7 S5 n$ L, d3 Fif [ -n "$RESULT" ]; then
) R% `+ A2 Y4 p% l; `; B #如果502则会执行这里的内容,随便加或改, ^4 m  C0 x8 ?- W: h
#reboot  L, n6 t( A% f. e* N5 m
#...# {$ b; f6 e1 l) ^# h) w% I
/etc/rc.d/init.d/nginxd restart& P; c! ^% c, `" i( \; f
/etc/rc.d/init.d/nginxd start; E! |5 m5 g$ N* ?) m, E0 R
fi* J- t# d  _! @+ F

) h' s; h8 N# n( s) w/ a# j# G将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了6 r! h5 `- \; r" e- C
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
8 p/ }6 }! M! G) V
/ b  `5 K! C$ @0 _# g扩展阅读:
" u: O4 Y+ \$ `) w. h系统cron设定:/etc/crontab4 _& j. i& }8 N/ h
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
# r; o% \0 A0 z  s: qSHELL=/bin/bash& X/ B/ G. V' y" v  a
PATH=/sbin:/bin:/usr/sbin:/usr/bin! d) j& [+ ]) X+ E% i
MAILTO=root
% W) A. [2 _! |2 C; B0 i% n6 \) o3 l5 vHOME=/
0 [+ |. s1 ]8 Z0 B' N8 J# run-parts! ~; \9 _  q. p6 m4 L6 g" r) b
01 * * * * root run-parts /etc/cron.hourly' @% _- j. Y" Q) I6 p
02 4 * * * root run-parts /etc/cron.daily# E8 i4 t" R, k
22 4 * * 0 root run-parts /etc/cron.weekly
" t2 Y5 Q6 c$ v3 A. y' M- g9 Z42 4 1 * * root run-parts /etc/cron.monthly) J5 i! b; e( w; I9 p8 F
- |# E! y9 z, l/ N6 Y; b
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
6 P2 M! d8 |; b% c% }) I7 D真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
3 f$ ^/ C# k# `' O" V第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。7 D* K' W; ?: }0 b: H! z: N
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
' |" l5 S  a* o/ {+ K) B3 E2 f第三部分,为需要执行的完整命令。! V: x- l7 ?+ _% v( H  t
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:* c; S. K' C1 \6 ]
0   7   *    *   *    root    mpg123 ~/wakeup.mp3
' u# q% ?( a7 a! J- x分 时 日 月 周, s+ ~5 Q) y0 U8 W$ C3 Q
星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
( t8 K+ G6 O% V! t. Y' x, J; o以下是各部分的取之范围:# [2 H+ L; ]& S* `( n: t$ I/ W
分钟 0~59
% e1 \+ `( M( F# V; ^) v( d( |+ _ 小时 0~23 ' |4 D/ S8 n( @% d9 o) C
日期 1~31 , c3 F- l! d" n0 b. @8 s
月份 1~12 2 }  ?0 E  I* ?8 o  X7 V1 c+ E
周 0~6
- W7 V/ O6 @) d" ?7 c/ p其中周的范围0~6,0代表星期天,1~6代表周一~周六。+ n9 ?+ g+ N( e! @2 a, G  k
让我们来看更多的例子:
9 Z+ V" ]2 ?  {$ D$ e6 P: Q0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统
% ^6 w9 Z$ Z2 A$ }9 Y0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件
* E- ]2 X* _% K) P0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐4 k0 Y6 C5 m9 P. h* p1 B" a
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:1 i) b' {7 u( s# d* y
*/2   *   *   *   *           root      ...............      #每两分钟就执行........$ H; W- q" e; f, h" i1 d) X) w; K
0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........
8 s% ^1 [6 Y% p用户的cron: crontab命令
) }" p2 t/ C/ W8 w$ `1 Z7 n上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
% S3 u/ }# q1 R9 C" ~' R首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
7 R& C' p2 S1 o# gpasswd -a galeki cron
6 }) t# E# K) @: y* z3 ~9 wcrontab命令主要有3个参数:
' }3 ]7 X8 x9 N4 Q( S, ~-e : 编辑用户的crontab。4 i6 l6 Y. C2 f+ ?
-l  : 列出用户的crontab的内容。
( \$ c/ H" [) Y* ]3 p  ]9 r2 \-r  : 删除用户的crontab的内容。
$ f- ?" p/ P  g# G4 W执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
! k2 M& |6 }8 o+ p  Bcrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。. P9 f7 W5 O9 L/ y0 m, y; W1 m

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站论坛 ( 蜀ICP备06004864号-6 )

GMT+8, 2026-8-6 02:45 , Processed in 0.069205 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表