找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17952|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
- E6 }+ ?$ _) g/ p5 [  j" s      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq1 u! ^( W& S1 V( r( F. V5 C/ E
实例讲解:
' h; K- Y+ j$ A, C: x0 C5 }1 i- R首先ssh登录你的vps
5 p9 U) b  w- k7 @9 h输入命令:crontab -e
: P. i7 x6 ]9 r$ r9 \, C- W7 Q6 K1 U
出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成8 y: P; E5 R  i8 M: K5 j

% c. u. }8 \: ^. E* A说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh6 \/ B* W! G1 j$ D
代表每3小时执行一次/www/web/目录下的restart_on_502.sh
6 l5 d6 ^$ F4 u$ K. D3 ^3 X: Z然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
, J! T' k9 B) F. U; j+ m) a表示进入了不可编辑状态可以输入命令,这是我们输入:wq' N2 k: O0 j2 u& l& y7 A! N
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
- b2 L1 ]( }8 b) @' X. ]就能看到我们编辑的定时任务了。
: f6 ?# K1 u/ I  s6 ]& ~/ R! O! b. t$ c' _" d
502.sh脚本内容:2 o; q1 f1 @, }1 `( N  O
& v! K1 p* H1 D
#!/bin/bash
" _! p# \7 P( h/ k. n, J: A/ ]#by admin@cm8.org
; E. D4 S6 ]! w$ x- g% OMY_URL=http://www.funjan.com
, m- v/ V5 ~5 w2 u1 F6 WRESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`8 E. ?' e/ E- H) E- K, u
if [ -n "$RESULT" ]; then1 K, |- S$ E! i% e5 \4 C6 Z8 ^
#如果502则会执行这里的内容,随便加或改
# ^  Y) A, X% L6 @  }6 s! t #reboot
. b! y# s- s  d& h #...
" g6 s- ~" _. M1 y9 G /etc/rc.d/init.d/nginxd restart6 ?9 @. ?' {1 `3 X# m- P0 e
/etc/rc.d/init.d/nginxd start
- C$ A3 E; I. s- E6 M( Rfi% E  i& U. @4 L! Q2 i& ]/ Q
2 d$ @# ]: o/ `: N7 V( Z  J/ {
将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了4 d- Y: r: W) c
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
2 L. R5 Q# k; }: l7 N
) j  h4 t; ]: o6 G; Y5 _扩展阅读:1 _' ^5 W/ H/ \' o4 A
系统cron设定:/etc/crontab& R+ y( z) `! A. J* z  ?1 w$ B$ N
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
: l6 ~/ P2 j6 X7 f0 J$ m7 sSHELL=/bin/bash4 @  t% U* k. ?' H1 T/ R  y
PATH=/sbin:/bin:/usr/sbin:/usr/bin8 n# D% c' L- I+ _
MAILTO=root+ Q% U6 R& V# l
HOME=/3 I' {2 n' s# y7 G  o2 z, {* z$ b8 L
# run-parts
# i' l  U7 f  v8 H2 r5 ~7 N01 * * * * root run-parts /etc/cron.hourly3 e; U7 T- {9 t4 _0 @; W$ k( T
02 4 * * * root run-parts /etc/cron.daily
9 C. S. {5 ?( x22 4 * * 0 root run-parts /etc/cron.weekly
; Z8 W8 A8 a) i4 R42 4 1 * * root run-parts /etc/cron.monthly
; R$ T( F+ g7 s  d+ D" O- C; K* ~' x8 g. x0 S4 j; S
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
. @% q' [; Z5 I6 n真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
8 o2 r7 j0 u6 q1 u第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。" B! }. @% J. p+ b
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
( t! j; c! ^3 `: s4 {& t7 Y第三部分,为需要执行的完整命令。
3 I! }5 Q# ?; T) u6 \第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:1 x3 A( P. @- i1 }/ `
0   7   *    *   *    root    mpg123 ~/wakeup.mp3 ( h, T) \' ~* p& B* ]: }
分 时 日 月 周
. j5 M5 q) _. L& f2 b) k星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
. _% G3 o! R" \$ n. |( w以下是各部分的取之范围:/ }" u+ S$ O; L+ S/ a
分钟 0~59 7 \9 L0 Q) e9 V3 F( G* }
小时 0~23 : r% J) h5 }" |
日期 1~31
7 H, ~+ V) O& G& X 月份 1~12 , K; @  W2 t6 N% r3 i* J
周 0~6
  |; {6 D- |4 ]% K' U其中周的范围0~6,0代表星期天,1~6代表周一~周六。! B$ l( b8 N3 J8 o% M
让我们来看更多的例子:7 O6 `* f$ I" I2 b7 h7 x
0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统7 k& n( }% t5 z. H7 y1 k9 ^
0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件
) `- }2 X: w& D1 h7 K6 O0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐
( U: L# L( @8 u" ?5 @假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:# e) }+ b. C  s5 A6 O
*/2   *   *   *   *           root      ...............      #每两分钟就执行........3 o- R4 A, O. C/ p
0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........# d. u' q: |; {/ _  r* F6 q7 ?
用户的cron: crontab命令
2 z  Z8 \: _) W0 j. i上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
1 o5 I% M9 M+ E% v+ ^! X6 G/ q首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:4 ?1 A) @  ?9 s+ @
# gpasswd -a galeki cron
; p' R3 b7 k- x( y9 [* Q. E; U! Pcrontab命令主要有3个参数:
! Z  m, N, H! x1 P-e : 编辑用户的crontab。
# h4 J8 u- ~6 ]* v- ]-l  : 列出用户的crontab的内容。
! c' w9 i" `& x) j2 ?' c-r  : 删除用户的crontab的内容。& U* v% n1 {6 P- s  R: i: A
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
; @! f7 E2 n$ V. Y' jcrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。. }$ N4 L, ]1 M" |0 i

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-10-29 07:46 , Processed in 0.125810 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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