找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 18994|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
) ^% A) w+ {( l9 H/ u+ k+ }6 |      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
: `( |$ G' k9 @5 T3 l4 D实例讲解:; r" w4 o7 l% Q9 v( j( N0 ]
首先ssh登录你的vps) p' L1 {0 k' E- X0 a; e; G
输入命令:crontab -e. Y: `; |8 q$ }& `/ x" L! G

; ?6 k9 H& W: B" f$ h出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
4 T7 k4 t  k( I% E0 S" |+ u- R, {' T' I6 P, {
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
9 S: h* u- h2 z( m9 {代表每3小时执行一次/www/web/目录下的restart_on_502.sh6 E! ?0 c, f9 d; ^! J3 Z' D/ X$ |8 u( j# R
然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --& T1 M0 z7 ~" _
表示进入了不可编辑状态可以输入命令,这是我们输入:wq
# m9 n/ w6 y% w: l+ K+ R程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
' {9 X2 e3 L$ F% S5 y就能看到我们编辑的定时任务了。
7 m+ J4 j, u0 _( D1 w$ f5 B) U( H. x2 F0 X
502.sh脚本内容:
" V, |4 F8 [% F2 v% k( s6 F3 _4 n* w/ x1 A, u% B/ e& ?8 x
#!/bin/bash
! G/ O4 M" [2 n4 D1 ]4 q) M1 q# X#by admin@cm8.org
. o: |- C& Y% O% B; j/ DMY_URL=http://www.funjan.com. T% s0 d( z  s7 x. {+ Y! V+ o
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
0 g8 ^! y, c6 B/ @3 e2 r: S8 e; m5 c: Iif [ -n "$RESULT" ]; then
9 K, t: X6 ?) ?- l1 ^$ R4 F #如果502则会执行这里的内容,随便加或改
' O0 V( D8 `* Z, E: E. [1 Q$ f #reboot) h) M6 g8 A7 C# s
#...9 d; C( X9 b3 r' t' W9 f* ?
/etc/rc.d/init.d/nginxd restart! B3 q+ E" u6 ^; ?; h/ y4 r& I
/etc/rc.d/init.d/nginxd start
& R  D) @$ A9 S; Pfi0 Q. b9 L; z+ h3 c& N3 m" R

. w) n5 E; T! n! _( }% x6 E8 s将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
6 k' A' R+ R& c( P, }/ V5 t) Y然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
  Z+ L3 K" p5 j, O$ Q
+ m3 D, z2 S+ i$ E+ Q扩展阅读:6 L3 B0 B% @4 T- }3 H# c9 ~0 I
系统cron设定:/etc/crontab( C6 l, s/ m6 S* M
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
+ @1 S7 _: j! NSHELL=/bin/bash8 c& y' h3 h" p' Y
PATH=/sbin:/bin:/usr/sbin:/usr/bin. _" V5 m  T& J) N
MAILTO=root' s! M8 ^  M  {" m5 B
HOME=/
2 B& B; B: S  l; H# h/ x; T0 F# run-parts
6 T/ ]5 J9 ~, d01 * * * * root run-parts /etc/cron.hourly0 \( {8 _" M: @' d0 P' u
02 4 * * * root run-parts /etc/cron.daily
" F/ t4 C% v6 Y& j* n) G! Q( g22 4 * * 0 root run-parts /etc/cron.weekly
  G. Z8 g( O5 Q5 b42 4 1 * * root run-parts /etc/cron.monthly( X9 u  ~+ K8 b8 i
; W$ Z. S/ }1 X. a
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。1 f1 X' A7 R. ^& ?
真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
9 Z* z, c0 Y+ ~/ p( o3 |第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。4 v3 C1 d: b/ j- Z4 b# ?8 l, [! Y) s
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。! N# |0 u% U; E
第三部分,为需要执行的完整命令。( ?# M# ^; E/ F. c9 G8 ]$ U4 W
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
: O" t# K" s% S2 T0   7   *    *   *    root    mpg123 ~/wakeup.mp3 ; V' c  q! c  u! M+ g3 t, o
分 时 日 月 周
* a0 q$ t9 d' t" Y9 j' P* h星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~$ X% o9 I- D9 z2 q( Z. ^3 Q! ?
以下是各部分的取之范围:. x; c3 B  {8 N- W# d! F
分钟 0~59
% i- \' ]; s: @# o. O 小时 0~23
, B6 D, ?. N: O7 e8 X: Z5 ^ 日期 1~31 ' {7 @: u4 e! f. m+ u# {' S3 T
月份 1~12 4 h& |6 ]. }+ \/ S
周 0~6 $ H( t6 L6 O* |- t! h4 \
其中周的范围0~6,0代表星期天,1~6代表周一~周六。
6 L' O% R( [( A( y让我们来看更多的例子:3 m* m' n) N- g
0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统- n2 o& R5 ]( U' m* i( y/ L& Q
0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件: h3 p; u/ R5 j9 o
0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐* x' Z# ~* Y% a) Q% V/ V
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:0 N0 }9 @- h  O* K5 m& M% E
*/2   *   *   *   *           root      ...............      #每两分钟就执行........
( U9 ?: f+ G: W* U6 l+ T$ v0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........" \  i/ c! x  e% u# m( C
用户的cron: crontab命令
! Y5 A5 h( [; |! U6 g/ }) {7 [上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
8 S4 a; S; H% n/ q; m, B" P首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
7 U8 i" m( q# q& l8 T( w# gpasswd -a galeki cron* `/ B* N! c+ u/ u. p
crontab命令主要有3个参数:
4 v  _6 o, y& I) V. w5 u( O-e : 编辑用户的crontab。
. l3 W$ ]: y. _: A, V. o-l  : 列出用户的crontab的内容。7 \3 K, s" _0 p! e. I% r% I
-r  : 删除用户的crontab的内容。
$ Y/ h' N4 z! y$ g6 e执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
7 s7 O, ^. @6 D) A. Wcrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
, s/ M) w, E6 J8 U

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-5-25 11:05 , Processed in 0.039168 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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