找回密码
 立即注册
查看: 15394|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。% e3 D4 A0 P& O" O; y! n
      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
) ^% [8 P. f5 w# O. q5 H' I/ ?1 G实例讲解:
5 ]* D6 g8 P) o8 W首先ssh登录你的vps# j! K& E% L; D0 x% z" Y6 e0 i  k
输入命令:crontab -e* a' c0 u& W5 B; O! D

) n# ~2 m( q0 l1 w& D出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
! K  b8 c4 O9 n' P& T1 ^0 L2 [* P0 ?3 p" f/ [
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
* o9 M0 K* x: v7 H代表每3小时执行一次/www/web/目录下的restart_on_502.sh
7 Z% i; M7 [8 b. U# l然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
; G+ P5 m" |3 v  s% L+ P" B" |' O' U* T表示进入了不可编辑状态可以输入命令,这是我们输入:wq: j* G. m& @1 G/ o0 j" c
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
- e( K- a! ]+ v( ]0 I+ ~2 H就能看到我们编辑的定时任务了。% x: K. p& a$ r* I/ r
7 w4 g% h  ~- T$ ?1 @+ v! B% ~
502.sh脚本内容:0 N8 S  d3 M: C9 r7 s' l3 m
7 u; }7 @* I$ t! A# g
#!/bin/bash1 X  D2 w9 N) k9 P* c( z$ n9 }
#by admin@cm8.org
2 g5 Z/ q2 @- y9 p- d( n9 [MY_URL=http://www.funjan.com
5 j( q! A, n# ^. p! V# RRESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`' z7 A1 j5 U$ S6 F1 A
if [ -n "$RESULT" ]; then
- ]" @" r, _9 [' P; U" t. m8 C #如果502则会执行这里的内容,随便加或改, q# ^# g. g9 d, Q
#reboot
& p' s% A) `/ d5 \+ S1 p #...2 C$ q; V1 v- L. v& s
/etc/rc.d/init.d/nginxd restart
# D) z& F9 q4 c8 S# x1 l /etc/rc.d/init.d/nginxd start
- A. O# d5 E1 a) s8 F, bfi
' A. x( Z3 m  g/ H# [* F0 Q5 d+ T
将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了) }6 Z* o+ I9 m" r6 k0 a
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。8 w. u: \) U. f

) u; J( y: J# s6 O8 ~5 D扩展阅读:
3 M& A( y3 E3 P8 q7 B" X系统cron设定:/etc/crontab9 ?+ k. m, Q: q8 u
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
$ F! H/ K  L% K: ZSHELL=/bin/bash
1 S9 \. {" R0 O5 G# K# E1 D8 _PATH=/sbin:/bin:/usr/sbin:/usr/bin/ ~, h6 O0 C  z& [/ r$ H1 u/ b9 w: z
MAILTO=root2 B7 o; z% |$ |- Z' |0 ~# n
HOME=/
" m2 F# X/ c9 T1 |7 s/ s0 q# run-parts/ `' ^# L; C3 ]4 x6 O* C
01 * * * * root run-parts /etc/cron.hourly
# L! Z# {, L8 I02 4 * * * root run-parts /etc/cron.daily
* Z2 F3 w; ^2 T7 h- i* c) \+ d9 W22 4 * * 0 root run-parts /etc/cron.weekly
) N  w8 c4 Q6 }& e- p42 4 1 * * root run-parts /etc/cron.monthly
: p! f" D( \  b) x
9 y1 i6 x" Y4 u: T* b9 j$ X+ m. ^以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。8 R5 J1 V( a+ S: Y/ n- v$ v
真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:$ q4 @2 P2 z# T: ]
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
) {1 W/ l1 _0 U- [第二部分,上面的文件全部是 "root",描述了执行任务时的用户。+ H1 Q7 ?( F- A* ~, |% b$ _! E
第三部分,为需要执行的完整命令。
7 Y7 l' _, Y- I: ?2 T+ |3 h第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:# C6 o$ F. \6 ], h4 m% F3 S, w$ ?
0   7   *    *   *    root    mpg123 ~/wakeup.mp3 ) g: z3 P5 r% a, i4 G2 d( M' h0 D
分 时 日 月 周
6 D$ B1 V' T8 ^$ `2 o* T2 `星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
; Q& ~9 i0 p& Z' C8 e9 g以下是各部分的取之范围:
: T- L0 I2 {* N7 N" {3 v; Y0 D4 l 分钟 0~59
# p) \( z! Q% W6 m  F 小时 0~23
+ [! C1 n% z9 D! _, m! n 日期 1~31 2 h7 n; e: J3 g/ `/ J, v' n  U
月份 1~12
8 r* v) D/ F  S. ?0 b9 u  W周 0~6 4 W5 {, J% l8 u
其中周的范围0~6,0代表星期天,1~6代表周一~周六。
4 U1 N+ j0 H9 G4 s& \. \让我们来看更多的例子:% O3 ^6 p; Y3 R8 a
0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统
2 p/ ^3 q% Y& S0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件
7 u" y4 ?9 O6 |- |" B0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐2 U+ `' F2 M1 H, |1 @8 T) _
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:6 E: N/ F" Z( ]  D, {! x
*/2   *   *   *   *           root      ...............      #每两分钟就执行........& [, o; P* a* y& O! v
0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........) F5 Q( u' x, L9 K: B3 G% l
用户的cron: crontab命令4 ^- F5 B7 [, t. v( \" u* O
上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。# o, G4 \/ b  n. t
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
) X1 M3 k) h! c/ K# gpasswd -a galeki cron& P2 g5 d' O" }1 q: K, U" I* J
crontab命令主要有3个参数:
0 {$ [" \# Z' V! U  _8 O-e : 编辑用户的crontab。
0 C! c9 G) U$ P2 d$ ]-l  : 列出用户的crontab的内容。' \, p' y5 {$ j4 m- [; @
-r  : 删除用户的crontab的内容。
9 t! h" Q% W. e/ b# p( g+ I执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
$ b2 O2 U5 Q0 Q- b. F+ Q/ ccrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。) {) f* \- D/ V$ q

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-2 10:56 , Processed in 0.070559 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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