找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 18173|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。% @5 w: Z* c# g
      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq, ]1 w, u2 a) C0 ]
实例讲解:
6 J& D+ @" n$ A首先ssh登录你的vps( U( n4 j: A: {% I3 j# E
输入命令:crontab -e  `' b$ i4 _7 I3 a" M
: j6 j8 T1 O) {8 H' t# d
出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
( y3 N, c( d* Y/ E/ t
5 M& L1 E: k4 G/ I  z* w说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh: u! E3 j) B' w- k
代表每3小时执行一次/www/web/目录下的restart_on_502.sh$ o$ {. k! K% W- l2 G
然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --! S4 H' O! V4 ]4 O
表示进入了不可编辑状态可以输入命令,这是我们输入:wq( L1 z  Z1 c- [
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
* e* z8 P- ?$ i) [就能看到我们编辑的定时任务了。( A* x2 q! @1 R2 t; A* o' q. {/ p

- x+ G3 P" q+ T5 t" t1 a502.sh脚本内容:; Q0 H# N& Q2 m+ `

" i' A6 P, o$ C# |#!/bin/bash
% t; ?  e6 j7 }! J& c- V. Y#by admin@cm8.org# l  Z$ D; y, r9 `0 w
MY_URL=http://www.funjan.com
, T) X' Q  C- i4 w6 \RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
" X( R- o$ g$ T0 |9 P+ V: t2 @; y: Uif [ -n "$RESULT" ]; then
; {6 N) y& O1 }+ e0 e' ]0 l9 Y: ~ #如果502则会执行这里的内容,随便加或改' g* y: j  M, ^9 n
#reboot
- R& _* i" T1 B* M) Y #...
. M( \# k- S# y5 N# A. ^ /etc/rc.d/init.d/nginxd restart
" T8 _  ]9 F5 c /etc/rc.d/init.d/nginxd start
& D4 g" C- j3 O- x/ Nfi
) {. l& q& w$ A; j# P7 r4 O2 s
. O" z6 O( d5 T7 }$ i3 T) G0 ~将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了+ B2 l6 A- P7 M# `- D8 r
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
$ \' z- Z1 q9 A# j
. t+ X! I+ M8 c) U; E' _扩展阅读:
3 F! g7 O6 F" |3 m' S3 B系统cron设定:/etc/crontab3 I! j. {. |. [$ n
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
$ b0 U+ h3 _) F2 P3 \! wSHELL=/bin/bash
7 r, }/ ?& u6 H! I  {8 v  fPATH=/sbin:/bin:/usr/sbin:/usr/bin/ |) T# n% s  N: M  ^- N
MAILTO=root6 T! H4 F! e+ _7 n# N$ T
HOME=/
% d9 N% y' r/ d6 x0 @# run-parts
$ f3 d% h' H' d1 A01 * * * * root run-parts /etc/cron.hourly
, {. L' N, Z" y02 4 * * * root run-parts /etc/cron.daily
! L! ~/ R" d0 W4 \4 |7 E$ N22 4 * * 0 root run-parts /etc/cron.weekly
$ Q3 P! b) _! M; `6 O0 p42 4 1 * * root run-parts /etc/cron.monthly) c. F/ }/ \% i6 m

8 P+ T$ d% E4 ?& X以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
7 N9 M% K+ q0 T! Q" m: s1 Y真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
: a3 K9 k, P6 Z4 S第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。' _: }* `1 k2 p4 {) n; X! K
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。8 `) l% n" M, l, n
第三部分,为需要执行的完整命令。- h% L& C" f& w1 s7 h
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:* M0 u5 V( {3 m6 z
0   7   *    *   *    root    mpg123 ~/wakeup.mp3 " }- o) [$ ^, y
分 时 日 月 周- k3 h4 Z3 x, S& t0 {$ ?1 H9 w; B* ]
星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~6 k# O  V$ h+ O4 R- ?
以下是各部分的取之范围:
, A2 Z! f9 m3 J4 e 分钟 0~59
) ~1 K) f$ ]9 L; r: q- H 小时 0~23
) L; T6 M9 s' v) i 日期 1~31 6 S6 L2 K/ Y8 B( I/ ^3 d
月份 1~12 . c' O7 X; V1 C
周 0~6 & Y& \) G" C" K+ H; t
其中周的范围0~6,0代表星期天,1~6代表周一~周六。& x4 F  E! u, U; q6 M
让我们来看更多的例子:
$ @7 i% L! J7 `% I; ~0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统2 }; h- p1 J& W# N0 p2 a
0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件
: e. E8 T0 W; M8 l& Y" [2 J: D0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐* |4 o! z/ K% D+ W; [
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:( b! E# R6 F3 p4 V1 R2 y
*/2   *   *   *   *           root      ...............      #每两分钟就执行........; m; h' @" Z8 v; W
0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........, _# v9 _% @; s1 p% H+ K3 J
用户的cron: crontab命令
8 O; I- q: U+ R& C6 m3 z" N7 [上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。( M, }4 N( C+ Z6 n4 P2 e
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:% ^1 m0 G. ~' [5 o/ O* U) J+ U
# gpasswd -a galeki cron
' r" F5 l6 f4 tcrontab命令主要有3个参数:
+ c0 C6 J" H, G-e : 编辑用户的crontab。* E& a$ l6 B1 ?2 q6 w5 S  v9 N
-l  : 列出用户的crontab的内容。$ _) r+ w, G( ^" @; F' O( m9 x
-r  : 删除用户的crontab的内容。
  b* b6 ^4 {. d; d1 {执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。( q9 f. W6 l6 m" E1 ?( b! Z' A
crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。  N" u/ R- X/ V. g; d( j: f: }

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-12-17 04:55 , Processed in 0.058355 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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