找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 19707|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
; g1 Q9 W( f6 `6 q% ~: I2 I2 f      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
0 |% B" w+ T6 @3 X实例讲解:
" y% F. W/ ?8 o0 X7 o首先ssh登录你的vps. o7 X6 z' E5 N# x
输入命令:crontab -e# x. X7 \7 I' E; ?# B" A5 l. j

% D; [/ Y. K# q' ^+ N+ f出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成3 f$ K1 ~! w9 X# Y6 c
: Z! ?% q3 [' r4 O5 {$ `- J9 ^# H  I
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh! n4 X. u$ j9 j7 V  l/ Z* `+ a
代表每3小时执行一次/www/web/目录下的restart_on_502.sh" {: m, Q. w- a$ n  E0 g! `$ l0 y, m
然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
" _# l8 X$ d5 U* _1 v表示进入了不可编辑状态可以输入命令,这是我们输入:wq. l/ U. m& P! [+ V7 v
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
$ m1 L9 e% o8 X: e& _就能看到我们编辑的定时任务了。% o5 V$ C+ D0 s/ \! V& D2 b+ S/ J. ^
, `6 M9 z5 ]  S4 F( Q$ m- N
502.sh脚本内容:
8 N, t- E& W$ G" Q0 |2 {1 A% l- S7 I9 t* ~2 o' ]
#!/bin/bash: J  `8 C* y1 m) C8 N" M! }  M
#by admin@cm8.org2 x) d$ {6 w* a# X1 O, a
MY_URL=http://www.funjan.com
6 ]+ p8 P$ d: `' B% vRESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
2 A" o/ d$ x; }- G; |4 d) o$ ?if [ -n "$RESULT" ]; then8 ^( I" O8 J; e, o2 `
#如果502则会执行这里的内容,随便加或改1 A. [% V  |! g6 H/ b$ a2 X; g
#reboot
( f- [2 K7 D8 `% M' c  ~& [ #...5 G- z% F( f4 w. A8 O
/etc/rc.d/init.d/nginxd restart
  w5 o; W: N4 [3 b /etc/rc.d/init.d/nginxd start- o4 ]- u3 v8 J1 ^9 X; Y$ M, ~1 J
fi
6 L' t$ x/ q  n! g% Y
7 ^0 ^3 Z5 H! O" X. p$ \5 A将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了1 X# u; y! _% e
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。( b9 @# `3 ~% Z9 l) M3 c
* f4 Y8 K8 N/ ]+ a" J
扩展阅读:
" R% n0 K, y% s. W8 K系统cron设定:/etc/crontab
. E0 x3 h( Q% @通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。, m& R# Q$ s9 N& o, @
SHELL=/bin/bash
5 D. h/ U3 m4 |7 }6 {PATH=/sbin:/bin:/usr/sbin:/usr/bin2 f1 k5 }$ D% j/ b
MAILTO=root; C! G9 j, k+ V, H& I
HOME=/
9 k+ Z  o1 i0 z. R; s0 }3 T# run-parts
( }3 x& A7 d+ j" X( O9 R01 * * * * root run-parts /etc/cron.hourly
5 N$ P5 Z. q: b# H0 M1 q, \( r02 4 * * * root run-parts /etc/cron.daily
" p$ o" E: l: ~2 N+ S" a22 4 * * 0 root run-parts /etc/cron.weekly
' r8 F* X: D4 q7 v( W42 4 1 * * root run-parts /etc/cron.monthly9 F% Y6 d) y3 e/ p8 ?
0 C! j  ~- L% y4 O
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
2 p1 z5 I4 w5 V+ E0 Q真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:+ Y7 }. z# e  n3 N' V0 F7 Y
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
* |  O5 \/ D3 m% H1 m; ^; x第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
5 }2 G) p- |+ w  o' N第三部分,为需要执行的完整命令。4 s  Z, b2 e; Q7 b+ `  ]
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:8 D! m. s% y0 g/ Y; z/ f6 `3 x
0   7   *    *   *    root    mpg123 ~/wakeup.mp3
6 x! X+ _5 u6 L! {; M7 E分 时 日 月 周
/ M$ s" u  Y2 P6 N星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
* ~9 n* }( y& v% n以下是各部分的取之范围:
. B2 B6 [; z( p8 _) y' ? 分钟 0~59 6 o) U! a2 s' q# A' f3 b7 r
小时 0~23
" O, K' ?& u2 A2 A3 T- v# } 日期 1~31 * `0 U" [2 [$ ?& i/ ]2 ?$ ?
月份 1~12
, r/ P) q# N# ]* ]& ^0 d( H7 h6 b; _周 0~6 " m" a) Z8 f( z2 k6 x1 A6 p# n
其中周的范围0~6,0代表星期天,1~6代表周一~周六。. h/ ?: L7 e& |3 w# L$ l" f6 c$ t
让我们来看更多的例子:
8 |+ ^+ d7 g! P1 f. b! @0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统
8 R% i  k$ t/ k' M0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件% F9 I# i% g% M; }2 |3 d) v( N
0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐
5 ?9 e# n0 x# T8 s/ l+ y+ B假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:
2 `- W+ ]0 Z7 l; k& o2 H! R*/2   *   *   *   *           root      ...............      #每两分钟就执行........* w, E* x9 D% v
0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........
; i/ |, D+ O) }用户的cron: crontab命令, S0 K* R1 e8 y% s, b  `
上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
( k- H' W6 @. e+ q# Z3 b) F首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
( t6 L' G7 Z# `0 |5 U6 E# gpasswd -a galeki cron
/ ^+ `" w/ M& |9 k, m# i$ W( xcrontab命令主要有3个参数:0 N3 r! a4 @" _$ E0 t+ V1 w' f
-e : 编辑用户的crontab。
  ?  ?9 i+ c- d0 O% Z-l  : 列出用户的crontab的内容。
# @* f$ _& O) l; ~-r  : 删除用户的crontab的内容。: b8 R- w; M7 H
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
5 W  \! f& c8 u! ^% Ncrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。5 S# d2 ?' y0 ~5 ~. T( l: i. F

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-10-5 02:54 , Processed in 0.075326 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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