找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 19458|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
* w( N# x' ^- ~/ \7 k. a      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
- @: F& x; ^2 m4 m& Z实例讲解:
) t2 h% q4 V' L8 Z  [3 `" \- W0 d首先ssh登录你的vps
. T. Z$ Z1 X- G- t+ Y输入命令:crontab -e
- h7 V; c6 v, R% O1 W
6 g8 z; x% U$ s  x出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
1 O! c( n( m. u5 H3 l9 {% U, b
0 L+ D8 k# t7 W' K: v' y/ _4 S, q说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
3 v. N0 T) B$ O; p代表每3小时执行一次/www/web/目录下的restart_on_502.sh+ J3 H9 u( Y9 p. P
然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
) C5 E% @  k2 m/ O$ R表示进入了不可编辑状态可以输入命令,这是我们输入:wq
4 a1 i$ k' H. f" r程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
3 {+ g) A8 B# |% E) @; }: U5 F# y就能看到我们编辑的定时任务了。
& a5 |6 `, c( P# }  P4 K" O2 }' f2 w
502.sh脚本内容:
% @7 x7 v9 Y1 q% F
3 I' }" V9 h( x$ y+ N#!/bin/bash/ z. R; X  \8 i- p( k9 c
#by admin@cm8.org( Z8 f& f' p1 P' D# E& p
MY_URL=http://www.funjan.com2 H8 y2 y" c  c% \* ~
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
$ Z' b; G% h9 w5 c/ iif [ -n "$RESULT" ]; then7 Q2 \( @! U5 K7 u
#如果502则会执行这里的内容,随便加或改
! f5 r! \: t6 u0 O' ]% {7 i5 Y #reboot$ L! k$ b/ s& ]9 g1 N$ Z" M" o
#...0 ^1 d+ Z9 [* X. b
/etc/rc.d/init.d/nginxd restart
: Q" m! j, `7 Q /etc/rc.d/init.d/nginxd start
9 x4 A1 w. A3 ]9 b: L) zfi
( v  q7 b7 i. ~0 o0 v/ ^# v) T+ t# }; }
将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了  ]# P$ ]- T( w( u
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
8 s3 R& `$ Z8 l
" m1 O$ k8 s# c/ K. A7 A" L6 Q7 M扩展阅读:  _, k5 U# u5 S5 u; G  z
系统cron设定:/etc/crontab
  e& Y' Y3 B+ A) Q2 b3 F3 `& r3 k通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。5 T, p4 f! K2 J; V# x4 ]
SHELL=/bin/bash
' J6 J* y( s, M9 XPATH=/sbin:/bin:/usr/sbin:/usr/bin
: v$ v2 V1 w* E  V8 [, ]9 n0 iMAILTO=root0 w. N$ p8 ~( G2 u
HOME=/
3 [' @( e1 L( v' h( m# run-parts6 w+ h: N( v1 N+ b* Y, x- ^" M( K  X
01 * * * * root run-parts /etc/cron.hourly
! z9 u  i5 J4 Q! R# |( f02 4 * * * root run-parts /etc/cron.daily, n# A% q9 r+ o1 E
22 4 * * 0 root run-parts /etc/cron.weekly
& n! l! Y* z8 z6 S' D7 t42 4 1 * * root run-parts /etc/cron.monthly* M$ V. F  c7 I( c3 N- l+ W; f- P
) }& N7 a9 p9 {9 ~+ d% X
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。# Z3 ^# b9 H8 T: G1 T+ n7 ~* w
真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:6 S- D2 A7 h4 u) N; P4 ?
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
. j$ R' j1 I3 i& {& s第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
# J4 ]5 N7 C: Z3 y) R6 e第三部分,为需要执行的完整命令。
  L  x% R  l: K5 ?2 R第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
; }0 ?; C' l9 ^& `1 @9 l0   7   *    *   *    root    mpg123 ~/wakeup.mp3
' _; r( h$ S( O: B" _: d分 时 日 月 周& ^9 f" _/ x. g- @
星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~' v! [8 y- L; v- o- p
以下是各部分的取之范围:% o4 U; H- W. [6 G
分钟 0~59 ; ?* v% h' f  R' l! U8 R
小时 0~23 + E* _2 C. D2 o0 T
日期 1~31
2 Q4 x0 X5 u- I2 I% I2 V* u4 G2 y 月份 1~12
( ^! W! P. H8 Y9 s$ y周 0~6
9 J3 X) Z, O7 ?5 d1 S其中周的范围0~6,0代表星期天,1~6代表周一~周六。+ t. Q! y; e6 x" l# ]
让我们来看更多的例子:
* K/ H4 Y! ?5 ^- Y# ^# b- i0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统
2 e( C% j' \# f, a9 U( `, ^8 W' m0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件# I3 h7 _5 S( F( b! F6 G) m# G6 `( F5 ~
0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐% |8 E, E4 ~, c: ?
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:) y3 J/ E$ X1 g3 h! ?0 v
*/2   *   *   *   *           root      ...............      #每两分钟就执行........& g: l5 O. z9 s; [) d9 L0 `2 O$ C
0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行......... q2 O9 {+ P; e8 ~! {
用户的cron: crontab命令6 \5 Q+ ?" |9 N2 P$ r! a% U
上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
4 N( Q. h2 _2 P* ^4 H$ g+ L首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:( K8 p( F/ c$ t8 \
# gpasswd -a galeki cron3 h) K1 d0 y- `- N0 x2 f
crontab命令主要有3个参数:- E) b" q$ ]+ ]- E5 g0 S$ w0 e/ m
-e : 编辑用户的crontab。
, i. y5 b/ F4 [" b' W( g% ]-l  : 列出用户的crontab的内容。
7 W  C. u4 k# w-r  : 删除用户的crontab的内容。3 p5 S! Y. L( f$ k9 b
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。+ C5 [/ T, f* n. W/ E$ q1 |
crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
- U4 \- Z6 o* d8 v  f

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-8-15 05:50 , Processed in 0.054078 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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