找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 18358|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。2 X* y& _* b- g# b0 B
      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq6 @1 p. [/ w$ }4 e7 z4 \
实例讲解:# K! j5 a7 }8 ~9 X
首先ssh登录你的vps
9 j# @6 H+ a5 n; A! J8 H2 B$ m: g! C- g输入命令:crontab -e
1 P4 |$ V2 B$ H* X9 E, N: ]1 V9 b$ Y
出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
* i0 ?' B4 ^5 I9 D- X. f! l- j8 L9 ?; e) I& ?0 G0 v5 |& _
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh0 H) Z- D- k; R
代表每3小时执行一次/www/web/目录下的restart_on_502.sh
9 y& Q5 s6 G/ H. R然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --( `! j/ t+ `7 ]( Y; P. M
表示进入了不可编辑状态可以输入命令,这是我们输入:wq* {7 u* e5 h  v  w
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
% F3 M5 x: [4 j% J7 F就能看到我们编辑的定时任务了。
" F& M  X$ _+ P2 d  U8 }8 i% Y9 G  w# Q# w* K# M7 Z: w; {* b% m' f
502.sh脚本内容:
* i! q+ v' n7 m+ i; R1 T/ ]. T
" L0 A1 S3 u' v; {4 B7 ?#!/bin/bash$ o6 J6 f0 ^9 w2 {
#by admin@cm8.org+ I) ^5 D0 O$ _% \: N3 m
MY_URL=http://www.funjan.com
: a) A/ ?: z0 C0 D2 Z" B  NRESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`% n; f- F! Z' }& b' q5 M+ n! P
if [ -n "$RESULT" ]; then
4 \. P4 r; E: A) W #如果502则会执行这里的内容,随便加或改
" t/ s# r  }' u #reboot, \* h& E! Z# i) L& c6 t! |
#...4 H; u! ?+ R8 N9 E- W/ w  o# q
/etc/rc.d/init.d/nginxd restart1 U# I$ i+ m% ]5 p5 X4 ?, a& j( Y2 m7 E- `- V
/etc/rc.d/init.d/nginxd start; e7 B: v6 L& v6 }
fi& W1 C) f2 {5 |! Y5 D0 W. t

- G: s1 u( L1 j  I将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了! Y, D9 T3 e# d* U0 \8 n4 E
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
2 X1 h: a3 T7 ^/ H* |% l( b
# \! l. g* U4 e! H, S; {4 `扩展阅读:2 A& E8 x: F4 p& o
系统cron设定:/etc/crontab
8 a9 f) r* g2 U7 O* n0 Q通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
  z. p! \) B: V, @$ i: ?! QSHELL=/bin/bash( `3 z3 \5 B& [1 t( x( o
PATH=/sbin:/bin:/usr/sbin:/usr/bin
/ j. ]# R7 [5 WMAILTO=root
: P, z* Y; L% K# WHOME=/
$ ~, f' D- Q4 t+ r& d, b: f( ^. I# run-parts$ u* h% b" o9 D! t. ~
01 * * * * root run-parts /etc/cron.hourly" c$ M3 r, B! r: |' ^( |) c
02 4 * * * root run-parts /etc/cron.daily7 F$ [2 y8 t8 `! J4 p# g
22 4 * * 0 root run-parts /etc/cron.weekly7 f! }" ?% }/ ]3 @
42 4 1 * * root run-parts /etc/cron.monthly
7 }/ \" _2 a9 J. @7 W( u+ T
( E  e0 v4 _5 A  g0 X  O# X  T9 ]以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
! f9 J" v# z; q/ L4 q" ^% X  G- x真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:/ p- u, f5 o6 d9 G8 m
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。3 S$ k9 _$ D6 M# f  @
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。! g4 k+ z8 H- F
第三部分,为需要执行的完整命令。
0 u' f; F+ U0 f5 \第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
4 T9 k3 n; i( C. ?7 E0   7   *    *   *    root    mpg123 ~/wakeup.mp3
' Z/ |* G6 o: ?分 时 日 月 周
# ?/ h0 r  i+ p  W星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
& u6 J. w  Q* R1 s$ F- S7 x7 G+ D以下是各部分的取之范围:) _( _+ X/ A& E% Q- Z6 z
分钟 0~59
, h) J0 @9 w; j- `! n 小时 0~23
. {6 c% M0 [5 k 日期 1~31
# T, v& j" g0 o+ p  Z3 ? 月份 1~12
5 {1 |0 O: o" }/ w周 0~6
/ }- R3 q! z5 ^其中周的范围0~6,0代表星期天,1~6代表周一~周六。3 ]/ x& C; h3 k+ ~- E
让我们来看更多的例子:' v) W1 f6 ~; Y
0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统
. ^. D! Q1 a. T' s0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件# W1 f" l" J; D
0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐
: P9 \( Y7 h+ M! I" j假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:. h  V; g# U4 n& I* y1 A0 D
*/2   *   *   *   *           root      ...............      #每两分钟就执行........! o- D# y% q$ r& t* K" C
0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........& ], G* i  f5 e" q: l0 t: z
用户的cron: crontab命令
) ]* y4 X( N4 ^6 J- u上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。) k6 F. M4 n7 n
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
2 G9 d  D) P  e1 @5 ^# gpasswd -a galeki cron
8 T3 A) S; C/ l& O7 p4 L* t8 ocrontab命令主要有3个参数:
! l" |1 [2 F6 Z* J0 q& ~-e : 编辑用户的crontab。
1 J; o! |8 x6 q5 Q5 v: Y/ l, E. t-l  : 列出用户的crontab的内容。
+ z4 Z: ~* `2 p-r  : 删除用户的crontab的内容。% i9 _5 C- `$ h+ u
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
/ O; j) m/ F# y6 A4 G( W4 v; xcrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。- x; X. w6 d( y! ~' V  J

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-2-4 20:17 , Processed in 0.071680 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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