找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17490|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。6 u* {0 p: ~; Y5 e# ?
      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
: ?8 ]8 g5 U1 [) o实例讲解:1 H7 R4 f4 D, K( b5 f: G8 r7 ^
首先ssh登录你的vps' n6 Z7 ]& {. [1 [3 s& Z
输入命令:crontab -e
) @  n- w) j2 n3 W5 w1 A
. `/ ^- ~1 U# {( Q" s) i- w, [出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
  K9 [3 {' q8 }+ P! y4 i( V
1 {: T) ?5 J: X# Z' W7 x说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
- S, ^; w5 w$ @& R/ x代表每3小时执行一次/www/web/目录下的restart_on_502.sh
% F' b5 E& a$ G. Y& C5 q" \& Y然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --9 K+ \0 X0 A4 n+ }8 }0 b
表示进入了不可编辑状态可以输入命令,这是我们输入:wq9 n3 l4 M0 H- R7 x
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l# M7 {- B, C$ O* G
就能看到我们编辑的定时任务了。# e" }* x( d8 P4 q) {1 `9 L
% {$ |! V: a) O
502.sh脚本内容:
% m6 l; b1 G! g% y7 Q0 ^6 a" O5 j0 G5 V7 P
#!/bin/bash
8 G% W, e" C  ~#by admin@cm8.org
1 S. l, l, q, y  c8 LMY_URL=http://www.funjan.com( J0 {. A- e& [1 E* F' U! X1 O
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
  B" J& v- |" r2 O2 Nif [ -n "$RESULT" ]; then
3 K2 i+ L& h# \/ w #如果502则会执行这里的内容,随便加或改
, g, E4 }  M7 a3 W #reboot! |# t  ?- j# W$ o" D
#...
0 \( l$ x5 j" t1 g: k /etc/rc.d/init.d/nginxd restart
0 n4 B# J1 T2 k5 b /etc/rc.d/init.d/nginxd start! O5 V+ V$ \. G4 |( {
fi( M1 A$ u; k5 \) q/ I+ {0 x& u6 Q' {

/ Z9 b1 Q2 X. y7 G, w5 Z/ S) S将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
# G. z+ O( H6 v  b6 h. \0 F' y3 O# R然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
6 b+ s9 o- P! Q  Q" m  G0 _; i9 a! L
" m3 Z) f; D, A. D扩展阅读:5 L  j/ K) j& o- w& M1 N
系统cron设定:/etc/crontab3 {/ e+ D/ {1 \, `
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
5 K5 e" Q% ~5 y2 N. M( TSHELL=/bin/bash
3 L8 _, h6 k, U: ~2 EPATH=/sbin:/bin:/usr/sbin:/usr/bin
# |  }! a( g% P! E" N- t' yMAILTO=root( J8 U* p- ]. A9 H$ q
HOME=/
7 T/ A% I5 |7 E4 a# run-parts- {0 N+ Q  E. G# I6 _4 V7 x1 X5 k% ~
01 * * * * root run-parts /etc/cron.hourly
) M  ~# x/ x+ |02 4 * * * root run-parts /etc/cron.daily( i! `; d+ F% v& q/ ]
22 4 * * 0 root run-parts /etc/cron.weekly2 n8 h& G) Z' h1 `
42 4 1 * * root run-parts /etc/cron.monthly) D: y; W5 `+ B

! P" ~( z) M; [$ X2 X以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
5 r) A$ z! s$ `7 `( t- e' x5 ~% y真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
/ B( _& f2 [/ n! n% y6 L第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。6 Y2 I, f; ]. n* q9 \% e: r
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
2 P' I/ Z' w0 X3 y; }4 B" F第三部分,为需要执行的完整命令。8 B& R, P. B) W, S' L
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:! L4 B. o( x9 \1 }
0   7   *    *   *    root    mpg123 ~/wakeup.mp3
, J7 F+ O0 h( N8 a& p$ D7 p& i, a分 时 日 月 周. d5 A" m6 |( W8 q6 D, n+ m  `
星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
6 j. |7 |& V3 E. J以下是各部分的取之范围:
( `( s3 _6 G' Q% S3 Q* I, I/ P 分钟 0~59
0 O, l- ~8 v5 |2 B4 N6 {4 k7 u7 @ 小时 0~23 # u/ a1 h5 G' y3 Y: U4 r8 e
日期 1~31
- q- D9 I# A. W3 x# w 月份 1~12
% q" l, X3 V, M: d' j周 0~6 + \5 \1 K3 R0 M
其中周的范围0~6,0代表星期天,1~6代表周一~周六。
) W+ K0 Z, n  w3 A  H  b9 z让我们来看更多的例子:- w9 {' D; P( |
0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统) P, C0 ?4 ?# H
0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件
( T5 X) }: M5 u$ T0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐
2 Z9 H& z" z! h) a# x假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:7 x9 T3 X: t- b. J2 g
*/2   *   *   *   *           root      ...............      #每两分钟就执行........! a; T+ t5 k" X
0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........
$ R0 `& a& ~2 G. S1 z8 M用户的cron: crontab命令. I+ W: n/ {  P  K0 T3 e
上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
6 W$ A4 U& z( |/ B+ M  [首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:5 ~6 V# t$ T6 M$ m
# gpasswd -a galeki cron
( m8 W! L  @, E; P" b7 e0 d1 U" vcrontab命令主要有3个参数:" H3 j9 a! z: o3 r. S
-e : 编辑用户的crontab。
" b0 E- |, d" j8 k9 Z# ^1 `-l  : 列出用户的crontab的内容。  j4 M0 m. Y, u2 C. {
-r  : 删除用户的crontab的内容。
* k% @! h" u( N3 M/ A2 V2 u7 z/ n执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。6 d# b2 f+ F& e( h# J5 }
crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
* t5 z! V! G+ s+ Y

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-7-5 13:58 , Processed in 0.079546 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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