找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 18632|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。  F7 A/ w' C; D1 I; _; I
      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
8 T9 r9 E+ H% P! i) K; T: `# f实例讲解:6 T6 v1 G# T" n7 e2 T3 [
首先ssh登录你的vps
# B4 A  J% D  I+ `! T  a' V4 f5 x输入命令:crontab -e
; ^4 ^+ x3 J* n! D6 U, X/ J. M$ R: d2 X5 H
出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成5 {4 ?9 ?) i$ F( ~* c6 l
( \6 d# F9 l& l& z7 M! Q
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
7 _9 _7 p" S1 r! [" @代表每3小时执行一次/www/web/目录下的restart_on_502.sh
+ O1 A, ]2 b* ~: A9 ^- {. }然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
9 X% g8 c0 p# d' H0 c表示进入了不可编辑状态可以输入命令,这是我们输入:wq1 v4 K9 @& ^% S$ L& [
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
# N3 w3 l+ E( G4 h+ w4 |就能看到我们编辑的定时任务了。/ K6 j* c+ \8 Y$ X, `

- |( N9 y3 i$ j" m502.sh脚本内容:
+ n8 e1 T# e7 ]; ?% R! z% H1 t' L( c% p
#!/bin/bash: F5 D" G& Q- s- T9 \! h' [
#by admin@cm8.org8 O1 e2 U& W% E0 C$ j' @7 f
MY_URL=http://www.funjan.com
% {2 F: I+ s4 L! C, q  E' wRESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
6 p/ s$ M* V" Wif [ -n "$RESULT" ]; then
) T( v, v* E1 n0 x9 }/ b #如果502则会执行这里的内容,随便加或改
+ t6 F0 W) g8 k5 k+ n% x #reboot
! [6 V, Q# X+ }) w! C# s #...
" c' J: ]% n. D" t3 T% F! E /etc/rc.d/init.d/nginxd restart( g' w( i$ }3 j
/etc/rc.d/init.d/nginxd start
: ?' |* y  T" p+ Ffi2 x# K# G2 W, q1 z" G
0 U5 v- l% h( S. K8 D+ i
将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
1 C! a% z* }& w! u1 D) T4 n然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
* K9 D( }) h8 g$ {3 j
  x0 a( _* f7 }3 W8 |3 G扩展阅读:
% t! b7 }( j/ w2 _# r# ^系统cron设定:/etc/crontab3 x" M. e7 P8 C4 w9 R
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。' {2 R8 C' V, M' @; X1 r8 \
SHELL=/bin/bash
+ @/ q  e. b  @' v& qPATH=/sbin:/bin:/usr/sbin:/usr/bin
% `' X1 X7 u7 W% ]# VMAILTO=root2 i3 g& O$ C" e
HOME=/
4 a+ J% S1 ?7 M) q+ o4 q# run-parts# l3 R9 W: T# P
01 * * * * root run-parts /etc/cron.hourly
3 D. R) ~& S; n- G  C02 4 * * * root run-parts /etc/cron.daily
( ]8 Z2 i! }8 i( x22 4 * * 0 root run-parts /etc/cron.weekly* o; H. D* i* A( z6 q
42 4 1 * * root run-parts /etc/cron.monthly! d) W( H  Z0 p8 ~  [

4 `& ~) y6 ?0 v6 V. ^4 ]5 H以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
$ @2 S( l, T- l' L2 g" b0 `: a真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:, b- r! c! z  J( `$ U" P1 i
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。. a+ A0 S1 f. Z# Q
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
* e4 l" q7 U: r3 U8 Z1 V% i第三部分,为需要执行的完整命令。* m/ U6 d- e  Q) X
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:, |4 x- a9 m8 W# ]- |% }( Q
0   7   *    *   *    root    mpg123 ~/wakeup.mp3
7 i; r) o5 A; j) R3 v7 C分 时 日 月 周
+ y0 u. p5 O% R* r4 X星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
: p( u+ l+ {: {以下是各部分的取之范围:# z2 q) n9 _$ ^6 O( }
分钟 0~59 + D$ x+ l& f/ v7 t4 ~/ l" P. O
小时 0~23 & R( D& d1 h* }$ J3 L3 D- f
日期 1~31
8 q% w9 O# j% R: B$ @2 H 月份 1~12
& Y0 y  n$ R% \' U1 x周 0~6 3 X% F& ^) X7 i# h
其中周的范围0~6,0代表星期天,1~6代表周一~周六。
: U/ G# w1 \; A2 b; v& w1 O让我们来看更多的例子:
. G2 J+ ]+ v; K) T) t" Q0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统0 r5 G+ p% Q, T& K" d( S* q( j& E
0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件  W. ?' p" G( `4 a& r2 E4 f
0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐) D3 }( W9 O8 }/ D
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:( A2 @/ S' J0 y; e# T- Z1 R) D; v2 V
*/2   *   *   *   *           root      ...............      #每两分钟就执行........
2 ?; W, v8 y/ l, v2 x& }6 |' Z0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........
/ c% S; W" A' [& t用户的cron: crontab命令
4 l+ Q+ ^% O: [( Z/ T  R% B. O上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。- l' c5 h# e' \" y; f
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
2 O( f# q) c: f, @# gpasswd -a galeki cron+ d4 N/ Z8 Y% Q8 B( z3 o0 u* ~
crontab命令主要有3个参数:
9 k1 H1 {4 L9 H* A- ]/ u6 Q-e : 编辑用户的crontab。
# u( ]) r& U: j6 ~+ r7 P-l  : 列出用户的crontab的内容。# z8 n7 O& m" l  g' t5 t
-r  : 删除用户的crontab的内容。
  f4 B# c( ~7 r' t2 x执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
( M$ S0 {1 Y; [3 M, H$ ycrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
) P* a' j6 D! t6 j! W$ i: j

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-3-26 06:12 , Processed in 0.070369 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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