找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 19102|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
3 _" @# H4 w; h/ `% Q1 x* Q% t      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq! K' [+ B) c0 T/ b9 j/ n
实例讲解:
4 P+ h! s8 a: o% C/ s5 Z( d首先ssh登录你的vps
! ^3 I8 W! m) b+ m' V  _输入命令:crontab -e: F1 T+ E, {9 ]  t3 M9 m/ y  ?  j

4 ~, _! ~& V; S' p+ n出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
. [* J: Y: u7 E) x. ?# S  W. O* N" r( t
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh. A5 w  V" J8 D. v) m' H7 U, v
代表每3小时执行一次/www/web/目录下的restart_on_502.sh: L! Y8 H5 D0 k
然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --. s: \3 w- D5 i. p" e2 y8 A' y$ n
表示进入了不可编辑状态可以输入命令,这是我们输入:wq
2 a: c9 A( g, z5 L- `% U程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
0 \, ]+ f4 ^1 O' r- z- H就能看到我们编辑的定时任务了。
% R3 w' G! N! p$ z- Q) v+ O, N5 w$ [; ?7 A$ a) b5 {3 H
502.sh脚本内容:
8 z* t' ]' M3 D+ |- l5 C; ?7 L1 G- B* c/ Z
#!/bin/bash
$ l% @" Q8 W7 R#by admin@cm8.org
9 C0 ^- N* j( t; q5 GMY_URL=http://www.funjan.com, [$ v8 D$ l! U9 ]
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`9 M  J3 X% B8 `8 H* T/ b
if [ -n "$RESULT" ]; then$ V- ?7 n4 [: X7 L7 {% n
#如果502则会执行这里的内容,随便加或改( u8 k6 x, P0 C8 e* q, X$ W
#reboot
6 J0 U  l; j2 C #...
1 ^# j: }* [1 J8 F, o: t" X /etc/rc.d/init.d/nginxd restart
4 f6 V+ v: H$ M6 T( X: s9 t /etc/rc.d/init.d/nginxd start; m" M6 r* i/ |/ ~. _. @
fi+ D+ V: q& Z" E
" e$ Z+ g8 H) b" u1 S: ]7 \$ Z
将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了! d5 }1 C: g* j2 Q
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。/ Y) o+ a3 D- \; @3 q! |
& ~4 ]  _1 G( x9 ?
扩展阅读:" l1 Q" a, G' e6 v0 }
系统cron设定:/etc/crontab/ Z) J* ~0 E' w6 {& b
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
2 `/ q/ d+ [$ x9 e! lSHELL=/bin/bash
4 N  [9 D  O1 c0 i$ _2 a% UPATH=/sbin:/bin:/usr/sbin:/usr/bin
/ K( a6 H8 T  Z, X, k: ?MAILTO=root
0 T2 @/ `$ h7 W# Q8 X, W. SHOME=/" Y5 ]" \, |4 G, D2 v
# run-parts
4 }3 U( J" R) U/ B4 L01 * * * * root run-parts /etc/cron.hourly
# X5 P7 J8 n4 K' Q+ N02 4 * * * root run-parts /etc/cron.daily& J; n8 R6 f: P+ w2 C8 @8 S* Z
22 4 * * 0 root run-parts /etc/cron.weekly
& C2 x) |5 l# n2 o5 t. _) T, \42 4 1 * * root run-parts /etc/cron.monthly
8 o5 L- C, q! Q+ q; ~; F: v8 U3 q) ^8 U
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。+ E' h! b$ r# X; C, B* C
真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
, Z0 ?6 i1 [+ R第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
* P6 P3 w5 M: t+ [8 J! @2 Y( @6 t第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
) M1 c$ L/ A- O' F; [, e第三部分,为需要执行的完整命令。" Z/ @3 r% G3 i; L& w. m6 T$ Q
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
% y7 g. G& ?( n* ?0   7   *    *   *    root    mpg123 ~/wakeup.mp3 - p8 t4 z- A* |- K& A$ u, [
分 时 日 月 周
0 U, w% `; f" F0 j# J' f) L星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
9 Y" K' M6 _4 Z以下是各部分的取之范围:& `* d+ L" p; s$ O, g$ |+ X
分钟 0~59 1 o+ m# y$ ?1 V
小时 0~23 9 b, p1 w& f2 o! i7 X' \
日期 1~31
' T( r. F" y. L! Q+ G* s7 Q 月份 1~12
/ E$ f6 q: b9 E2 P周 0~6
% b, N& H6 ^; b" [其中周的范围0~6,0代表星期天,1~6代表周一~周六。0 |9 P4 R9 x$ B2 ]& \! Q
让我们来看更多的例子:
! h% `+ O6 t$ v- G+ V! P& x& l- g0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统
7 m) u5 v! v: a' Q* f: A0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件
4 ?5 N- }- N9 J0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐; T9 a& J7 t: U0 Z& p7 n
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:
* g2 N/ m' B; q( p# D0 H5 ^+ J. g*/2   *   *   *   *           root      ...............      #每两分钟就执行........4 I$ g- x9 s, h4 E1 D. h% Q; F4 K
0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........
; p" P2 }. B4 m) ?+ a, ]/ j  y0 A5 ^用户的cron: crontab命令
/ k; J4 h6 `3 I. n8 H" ^: S. X上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。4 B/ y6 O5 G1 u5 s0 G
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
$ K5 i/ z1 s3 D9 e# gpasswd -a galeki cron5 Q4 t) [, y1 F
crontab命令主要有3个参数:
7 B5 \& z) H2 O3 ^3 k$ z# `-e : 编辑用户的crontab。
$ r. x4 G0 w2 H& C" R3 e: t4 V% w-l  : 列出用户的crontab的内容。
2 D$ F4 E! ?9 \3 \! ]-r  : 删除用户的crontab的内容。
* b0 q" f+ b1 Q( C% q7 g$ v( C, x- |执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
& g5 N" a. l; C4 D$ V, x; n# Ocrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。) I# Y4 @, [) P6 F  I( z

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-6-16 10:54 , Processed in 0.073737 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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