找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 19807|回复: 0

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

[复制链接]
发表于 2012-6-2 00:06:56 | 显示全部楼层 |阅读模式
      在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。( z7 f0 ^" [" |8 G
      利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
& l+ L0 x9 P. T# ?实例讲解:
1 R' W5 M, h  K3 z& k( H% v首先ssh登录你的vps7 C3 w3 P5 `  ?
输入命令:crontab -e  L" s( e! C, l4 s& f/ T

4 O2 C- ]$ T2 o1 x出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
  o# S% N4 z# A' G  n4 p
& b. D# v. p/ Z* P说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh8 R' M+ r3 U: i5 z, V
代表每3小时执行一次/www/web/目录下的restart_on_502.sh
' y* h9 l3 z5 R. {然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --) W& E( R1 i1 ]& H4 _
表示进入了不可编辑状态可以输入命令,这是我们输入:wq
# k, U: n; B& e; P7 a6 a. w程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l# K2 y$ O9 p6 u' a* ]
就能看到我们编辑的定时任务了。
) K& M- R5 Y  t' ~( D6 f! p! g2 E  d& W  s8 w
502.sh脚本内容:8 E. e5 M" {8 F% ?; G) K/ I# H, ^

" Z0 ~0 [" z) |3 o5 l#!/bin/bash
/ N! B) ~# A" n/ E+ Q' |# d#by admin@cm8.org9 K5 m! Z' ^4 H2 m6 A
MY_URL=http://www.funjan.com
- _5 Y9 z( C- D  Q" ^+ S( p- [RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`" K; Q& y' m9 `2 ~$ z/ U
if [ -n "$RESULT" ]; then
* k  @  ?/ G) X- t: b( A4 I #如果502则会执行这里的内容,随便加或改( m) j# g5 ^0 j7 r- S. @) I* S( k
#reboot
/ O0 o( d8 E5 j! H #...
. [, N7 r" O9 s6 K3 X /etc/rc.d/init.d/nginxd restart
1 L$ h. ^" ~' D8 c' { /etc/rc.d/init.d/nginxd start
* Y, W. g1 X' J$ {# c( [fi+ S. ^0 Z6 K! ]2 d/ s  Q
& t+ u; X: x6 U5 u0 V' ]- d4 T; I
将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了1 }: O8 x/ ]6 r
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。7 R  y, A! e: n

" e: R: K. O4 N; @' I扩展阅读:2 ~5 f' n& s' d$ U" @; S8 r+ N
系统cron设定:/etc/crontab: ^" \6 o* O- I
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。7 M# w% D" j- x. k9 B
SHELL=/bin/bash
! K( l; \$ e+ M3 k: KPATH=/sbin:/bin:/usr/sbin:/usr/bin+ ^9 z' S) O; J
MAILTO=root2 B8 J1 J% {$ _3 |# P
HOME=/1 e  A1 S7 j# A) B0 h8 s
# run-parts6 u0 H: I' g) @9 h- v  Y% S4 f
01 * * * * root run-parts /etc/cron.hourly
% Q3 f7 }  o& K02 4 * * * root run-parts /etc/cron.daily
1 G# @$ m+ b/ j# h22 4 * * 0 root run-parts /etc/cron.weekly- F8 ^- U" o/ U0 k5 g# ~
42 4 1 * * root run-parts /etc/cron.monthly% ?8 j2 |$ ~' F* I7 {0 Q
/ ^4 s6 R$ X7 u( {3 c$ q- A
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
8 c7 M# [8 N" C# Q8 K1 T9 {0 w真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:5 ~/ f4 t- G2 \/ Q4 g
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
9 q$ _( Z0 h3 j/ i, `  j) ~第二部分,上面的文件全部是 "root",描述了执行任务时的用户。$ A' a- N+ p2 H0 Q6 r9 Q5 Y3 b9 e
第三部分,为需要执行的完整命令。5 U/ D: q0 {! e: N1 R3 N7 u
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:  ?) l- V, G; h- k/ P6 {- [; s
0   7   *    *   *    root    mpg123 ~/wakeup.mp3 0 b; ~* i9 x" P8 w1 T1 o
分 时 日 月 周
9 u3 t6 b' J# Q4 t; g/ [" @; b星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~6 p3 B# j9 K3 ?/ n
以下是各部分的取之范围:
6 {( p1 e& }' A8 Q0 g4 k 分钟 0~59
% c( |2 ~* D& F4 K5 y6 u3 b7 C 小时 0~23
% j8 o% O  ]* P" N 日期 1~31 ( z& H9 I1 h" Y' r6 X
月份 1~12 # A) x8 k5 Q# I$ G) |! P
周 0~6 ' E3 \: U# t; X3 R
其中周的范围0~6,0代表星期天,1~6代表周一~周六。
$ _) t+ y" N9 t. p让我们来看更多的例子:
8 j0 x7 o, y& G) T7 L0  4  * * 0     root    emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统
) e8 L) \* V  F1 o/ B/ {5 v0  2  1 * *     root    rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件4 g, X' a5 h+ ]/ h) g8 f
0  8  6  5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐
# x2 ^: [7 G* x( f6 o* n假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:
/ H( M! M8 {. E( K# _*/2   *   *   *   *           root      ...............      #每两分钟就执行........3 ~' r/ ?* ?: s! X
0  6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........2 n/ |: A8 b& o$ w) Y/ }! Q. U
用户的cron: crontab命令! l# u; g* J; y5 K) j4 w
上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
3 S) G3 q9 G. H首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
& d/ b0 l2 r6 i" x/ ]8 @# gpasswd -a galeki cron0 t- m6 A0 c" l& T
crontab命令主要有3个参数:) z/ ]7 V7 F9 r" f/ }" n6 u8 ?
-e : 编辑用户的crontab。
0 h% R9 X2 o, g  y7 m-l  : 列出用户的crontab的内容。3 P; G' R# \4 b# I
-r  : 删除用户的crontab的内容。$ U0 D! _+ F4 @4 b: ~/ @
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
; r! X6 X7 _9 @  d8 T* k% }: w, N) ]crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
# I& \/ {( \: p* C6 g! u

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-10-24 17:48 , Processed in 0.072019 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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