找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 19188|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
4 T0 G" @% C' I      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
$ K* j( N8 W; ~3 w; }1 ~( z9 c实例讲解:0 o/ N# _; m6 l% T$ F& v  ~' N
首先ssh登录你的vps
7 w! I( w& Q6 q& f0 o- L3 F输入命令:crontab -e
/ [$ ?9 W/ K6 d/ H8 l4 X* W: b
; u8 v7 q5 E9 ^- N. S! L( m. M# A出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成& x  [& u, x% d9 I

' u; \+ \$ c9 s5 x- n  w) T% r& Y" c. z说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
, J% V- F+ s$ W: {代表每3小时执行一次/www/web/目录下的restart_on_502.sh
" D' a: N# J& Y然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --9 \3 ^- B. V8 z1 J
表示进入了不可编辑状态可以输入命令,这是我们输入:wq
: @8 S! s  D* h5 B; h; k, ~* C程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
7 n9 H" h8 N6 A& o2 h9 Z就能看到我们编辑的定时任务了。$ q, c3 N/ {- e* N  S8 D+ U( A

$ |! z% z+ L6 c& ?502.sh脚本内容:% f% n. h' g* y& `
  @7 B: @8 X4 H5 M' m! p: n( R
#!/bin/bash
5 W% D; S+ i2 k" |( O/ b#by admin@cm8.org
, a/ ^8 E1 [, [* h5 \& t6 aMY_URL=http://www.funjan.com' f* m4 Y9 S0 {
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`" B. _% `+ i# s: @0 B; R. E1 O
if [ -n "$RESULT" ]; then4 I$ V5 l( ^  e" Q% X. m
#如果502则会执行这里的内容,随便加或改
5 q9 h% I2 I0 O2 g4 Y% k #reboot
! i7 o3 D- k/ R+ y #...
; [3 C, [# p  s: _- Y+ e( A0 D /etc/rc.d/init.d/nginxd restart! H9 f, l8 O. |$ L- B; D1 N* L) V
/etc/rc.d/init.d/nginxd start  P/ U5 D- e) P/ v4 \- Z
fi
* i( z. ^; I' E( `$ \0 x$ X) J. j4 E0 P( I" \* w
将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
, b. f8 _, ?* v) M2 u: U) [然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。+ u% @$ L9 a. z" I+ e. [) E& i
# \9 l, v/ _9 h7 B( z5 Y
扩展阅读:
+ k- m/ y& S; H2 b系统cron设定:/etc/crontab
! {! F7 s% v/ m  N0 K" C通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
# x1 e! r$ B. C! mSHELL=/bin/bash
8 Q+ M. \/ c) J9 k: v* K1 dPATH=/sbin:/bin:/usr/sbin:/usr/bin2 c* i5 E# c4 e" w( W$ {1 x
MAILTO=root( y- n2 z8 d* _. v* J' d4 V8 j+ Y
HOME=/
) d! T( E; Q/ G: H4 D! Z/ O# u- H# run-parts- f# d& r2 h4 Y, t: D4 T
01 * * * * root run-parts /etc/cron.hourly
8 V6 m- K! I, u02 4 * * * root run-parts /etc/cron.daily
7 Q6 M3 ]# i6 s/ x22 4 * * 0 root run-parts /etc/cron.weekly
( y5 J6 c. U8 {4 S42 4 1 * * root run-parts /etc/cron.monthly6 C3 }/ @0 A' ^
+ H0 z9 c1 W0 M. }) P, Z! H) F
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
5 s' W9 r0 ^& S- X0 R5 X" e" m8 x真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
; h+ l7 p" R" Y- U, z$ M, t第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。, c0 A; n- W8 L1 p# s; A9 L0 S3 s  @
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。* @- L  p& `! t; i: w1 i/ c
第三部分,为需要执行的完整命令。
( G6 p0 `( i2 L第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:# k- n5 D  X! y3 _& M
0   7   *    *   *    root    mpg123 ~/wakeup.mp3
/ h: e, s* K2 v5 }分 时 日 月 周& j) R( l2 n% Y. |; t" Z- b
星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~" a# O7 U8 j+ ]/ I, P6 S4 |# F4 B
以下是各部分的取之范围:5 _7 X( c( F; S
分钟 0~59 ' `4 G3 V( v8 I2 e7 ~
小时 0~23 0 x# T5 i; ?7 q( A& }. G' n
日期 1~31 1 R& d( p: R; Z, {
月份 1~12 * u" Q8 X) T4 {
周 0~6
+ J" Y$ n: p! H# Q8 u其中周的范围0~6,0代表星期天,1~6代表周一~周六。
+ Y' v* ?- R& R" G1 B! g让我们来看更多的例子:* w' @% G, E( G4 s5 Y
0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统
. `* m/ ^( k1 V. U5 t  r& K; ]$ ]0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件, u7 h) v& a" j
0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐8 v* J. n; b3 @% o5 [" A3 f
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:
1 v* e: e9 z' K( X! ^*/2   *   *   *   *           root      ...............      #每两分钟就执行........' g5 x6 d" H# ~) Z1 [
0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........0 B) ^4 w# R7 `1 A1 z
用户的cron: crontab命令
& M, J" a1 ^& m上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。1 Y& v0 V5 y' K' ^
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
" X! @. @( |& [, V7 A' k, E" ^  b2 k$ ?# gpasswd -a galeki cron
$ y' T* j3 Q. @- ]1 Z- fcrontab命令主要有3个参数:
: B, M9 p2 L% }0 E; @0 y-e : 编辑用户的crontab。0 ]3 w3 E* F0 Z8 r, z% L
-l  : 列出用户的crontab的内容。
4 n: W1 B3 J; Z" ~# V. j' z! }1 F-r  : 删除用户的crontab的内容。
. I9 t% b1 y6 ?3 r6 R8 K! z8 e执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。4 v: z4 [5 W& F; L! E9 u! |, A: G
crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。9 r: Z- [4 J3 l0 Z& d& l( M

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-25 12:51 , Processed in 0.050838 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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