找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17999|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
9 ]3 x; C% l' b# j, T      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
8 ]  R3 u: x7 C. k+ T6 G0 J$ ?实例讲解:1 Y  D9 h. y$ r; ^& S( A
首先ssh登录你的vps6 @- @# D% D( @
输入命令:crontab -e. N6 O: g, z8 N$ o( y5 D6 s9 [% R+ K
; g9 L7 f4 u! R
出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
4 @: x$ Y& ?' d+ b1 I, L' |- ?- m. l8 [! b, e) T/ f; P/ ?
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
- T& o, I% o( C' H& ^代表每3小时执行一次/www/web/目录下的restart_on_502.sh  p5 u  J, R% X3 C+ x( \1 A# \; O& w; l
然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
% e! I0 R% V6 m, g. F8 f# p. e表示进入了不可编辑状态可以输入命令,这是我们输入:wq
' n' H1 ^4 x+ c( C4 R程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l2 M4 T0 @, m- _0 l  o
就能看到我们编辑的定时任务了。
( L4 a; _3 U% n5 N1 u* p+ ]" c$ x! f: D" J; h- A
502.sh脚本内容:  d/ X: Q/ ^3 z+ Z! N/ A$ |

, J- H' x: t( E#!/bin/bash4 V& Z7 o4 S8 X0 q
#by admin@cm8.org
5 [. N  e- G* NMY_URL=http://www.funjan.com' R, r" \( U7 e; f  D( S
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`( d" ~! `/ O3 B8 v1 o  w, X
if [ -n "$RESULT" ]; then
0 K# @# L4 d9 s- B, Y- F3 J8 H" P #如果502则会执行这里的内容,随便加或改) q" B# i6 l& W+ x, W) {
#reboot
. x0 I* |; E! A, f( P1 C8 Q #...1 [9 Q: \8 s3 G! Q
/etc/rc.d/init.d/nginxd restart3 v! }6 b% D! n: L+ d
/etc/rc.d/init.d/nginxd start
. G1 J' T" J) w& o3 j; u1 q# }  ^, G( ~fi+ \8 R. |" e9 A) m0 H

% B! u) n; f7 I* K& p  z将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了6 b. s2 v, Q  f
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。( I( y7 P; r4 v# t
* B3 c$ {2 n1 A- \/ \
扩展阅读:5 T2 Q$ T9 w: }! |
系统cron设定:/etc/crontab' H# N1 o- P4 u: Z# y% |
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。; Q! H# \# W* I* n
SHELL=/bin/bash0 E) y( q$ L5 E9 P$ {
PATH=/sbin:/bin:/usr/sbin:/usr/bin
7 O7 o' J3 [/ FMAILTO=root
. K! n; D5 z7 n& g# T5 t9 F8 X$ UHOME=/
3 B: S' W3 V# ]# run-parts0 q+ w# S; |8 I" ?
01 * * * * root run-parts /etc/cron.hourly& m. O2 f) R& s( H8 ~
02 4 * * * root run-parts /etc/cron.daily
- ]* q3 g3 {( }/ I! J% |6 _; K8 ]( W22 4 * * 0 root run-parts /etc/cron.weekly) Q; ]/ U8 @7 }! F! F' ^
42 4 1 * * root run-parts /etc/cron.monthly* {  T' @! Q" k$ h9 s1 W

- _* I$ ^" y8 t! }( _以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。; n* `( O: b1 F, {" W& Y' d
真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:6 c& ~9 U, W9 p! \. a* T
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
9 b9 H  X: y( @9 d. c+ v# N/ P第二部分,上面的文件全部是 "root",描述了执行任务时的用户。7 a$ e$ I3 _- I( q; w
第三部分,为需要执行的完整命令。
8 h/ a& N+ `: Z' `! c第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
, o1 [7 S" [7 s- K% _0   7   *    *   *    root    mpg123 ~/wakeup.mp3
. j+ k+ v' |; H" F分 时 日 月 周$ ~1 N* U# o; u2 E5 q1 Q
星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
+ Y$ ~& ?3 V! ^* O3 o1 }( ?% m以下是各部分的取之范围:3 G1 p4 j, ^( j4 P* r; K
分钟 0~59
  C9 Z! _3 ~* M! C% `' i) f 小时 0~23 # x& m- o; Q& ^
日期 1~31 , Y* a# ^3 s% r+ F  x, y$ d3 r
月份 1~12
+ a  v+ i1 N( F, o% d3 R' |周 0~6
9 S6 {1 R5 L8 f; o) w其中周的范围0~6,0代表星期天,1~6代表周一~周六。
; S" b% j2 M2 T. q2 t3 o让我们来看更多的例子:: H5 z) J. m& {, r  b
0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统
* C; u: W1 J& ]6 f0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件
; Q6 g6 a/ C, u1 W5 o% y0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐
, ^4 V' o8 {+ Y7 u5 ?, J+ N假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:8 a% F' w7 F  Q# _( R0 H9 i/ @
*/2   *   *   *   *           root      ...............      #每两分钟就执行........
/ ^1 ]' n0 L( E7 F3 S0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........
) ?# K4 t- S1 S0 l, Q# n% t% ?) m( Y用户的cron: crontab命令+ i1 `& M% U% |9 k/ f4 ?2 l4 |
上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。* Z: K- }) }3 D
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
& U% v7 w9 P6 w. {; x# gpasswd -a galeki cron
/ k$ i4 C$ h' H$ u* W9 q: pcrontab命令主要有3个参数:
- |) D& I  Y8 t; o% F! i-e : 编辑用户的crontab。
, r( a! [9 L( X) h-l  : 列出用户的crontab的内容。5 ?8 g5 \- |; U/ E# ?& C, j
-r  : 删除用户的crontab的内容。: [4 N  |& a3 V8 H9 G( ?
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
; o" F' J! o/ J9 l* d5 i% D9 Xcrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
$ s  e2 Z) x7 R* C! x  [

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-11-5 00:53 , Processed in 0.079795 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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