|
|
在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
4 G) B5 o4 @: t2 y2 @$ L p9 V% H 利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq9 c% V! Y) b4 c! k K
实例讲解:/ c# ~. K) I$ a( \! C
首先ssh登录你的vps
# e& Z% _! o7 H3 b, C! b+ x, [" E输入命令:crontab -e& i( \& s+ u$ X V& Q5 w/ ?4 e
! p# O. k$ S, o0 J, }. C: w# p
出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
7 D1 r, K7 S" a2 B0 Z: P
( L! ]# l- r+ r+ A说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
]% S7 ]' ~+ e6 F8 Y代表每3小时执行一次/www/web/目录下的restart_on_502.sh" W# L6 u% o) O5 H
然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
( s' _: G5 I. u6 d0 O表示进入了不可编辑状态可以输入命令,这是我们输入:wq
- K+ u" n" r, z& l/ F6 X9 t程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
: X' n- C: o" `" p2 O就能看到我们编辑的定时任务了。8 d5 P+ ~# \' n9 j# J$ F8 N& U K
! T" Y: w! ~, ~9 v0 h; D
502.sh脚本内容:
, b# u9 m& k( G7 J) A
$ k6 D; w- m# G9 ]; |( V ]#!/bin/bash
% N) j- I0 l! p( Z2 D" I& J, d#by admin@cm8.org6 m& G5 Z* J- f8 X4 |8 Q, W
MY_URL=http://www.funjan.com
! p- u2 o1 e, R( r+ mRESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`6 E9 N4 ~. ^' `, S: D
if [ -n "$RESULT" ]; then
. M2 M; F% G# \( [0 E3 ]0 } #如果502则会执行这里的内容,随便加或改
$ b }. ^% y" |" |/ z0 l #reboot
9 o- e9 b" @% U' D# N4 T2 u #...# _% j1 R; f' ? V
/etc/rc.d/init.d/nginxd restart
6 B `4 `. r5 b- y /etc/rc.d/init.d/nginxd start
% i7 l. B+ n) {9 Efi5 |/ B0 h& ?3 E4 i0 @8 b
& E6 G. G9 N* f( C
将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
# m+ ]5 }8 @; m0 t( }8 I然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。% w9 B& h& d+ h* R. R' p/ d W2 [
, ]& i) ~* V" i2 h扩展阅读:* ^; y% a w7 T6 B5 F( R
系统cron设定:/etc/crontab
. W+ y( y# y4 }, C9 i; G. z" R% W1 F通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。& a2 i. y9 L! f/ D% x, f
SHELL=/bin/bash
5 T- Y$ N# B( g; h: aPATH=/sbin:/bin:/usr/sbin:/usr/bin
; Z4 Z7 i7 C/ n4 y/ DMAILTO=root
: k0 {5 C4 E6 O6 `! `HOME=/
) j! ?+ @# o# a# run-parts
/ O, c& n( A8 |- }+ t* z01 * * * * root run-parts /etc/cron.hourly
/ _4 B" n0 ~1 J3 Q8 W" Q02 4 * * * root run-parts /etc/cron.daily
+ `. X& N# ?! ]5 N1 ]/ @22 4 * * 0 root run-parts /etc/cron.weekly1 D- t/ G/ D) w1 Q: T5 `
42 4 1 * * root run-parts /etc/cron.monthly
) J0 S o/ j* n# k
& n2 c+ d1 j1 J$ Y以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。( n3 K. v2 i- M6 I' q0 |
真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:" F2 @# i, ?7 A. g, C; Y
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
! P" T. d2 \1 o g第二部分,上面的文件全部是 "root",描述了执行任务时的用户。5 m# J. |4 t9 s R4 P
第三部分,为需要执行的完整命令。
, x) B* C# Y6 h. R第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:/ R# ?* `5 `# B: d; l
0 7 * * * root mpg123 ~/wakeup.mp3 4 g- g: x3 P# d! ]
分 时 日 月 周
) ^% z, c, G' W: n( d星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~! U' {3 m: N0 a2 Q3 O+ a
以下是各部分的取之范围:
1 ]3 o1 S! ^/ z0 t I 分钟 0~59
' ^ m" N6 W0 k4 w* ~8 P( N 小时 0~23 6 l+ ^9 U2 E* b* f5 w2 f- Q" R
日期 1~31
6 J$ N2 k. p: q' |# Y: L 月份 1~12
. Q( ~8 h, p( {! p. F* N0 X# s1 W周 0~6
6 c. E8 y: D. m7 e8 {其中周的范围0~6,0代表星期天,1~6代表周一~周六。
3 F7 x9 R! F4 w e0 U让我们来看更多的例子:
+ l5 g% j8 i/ A: u4 m( G3 m; {0 4 * * 0 root emerge --sync && emerge -uD world #每周日凌晨4点,更新系统
$ B0 h# W+ o W& r0 Q0 2 1 * * root rm -f /tmp/* #每月1号凌晨2点,清理/tmp下的文件+ ` K5 l1 ]0 }/ P$ p( X- A$ |
0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日给robin发信祝他生日快乐, f$ A& z5 s/ t
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:
/ K+ L) @3 G* `3 S$ @% N9 _7 g*/2 * * * * root ............... #每两分钟就执行........
# Z% ~& k5 i5 {# b0 6,12,18 * * * root ............... #每天6点、12点、18点执行........
) s+ _, F/ j) D3 ~用户的cron: crontab命令
* e$ a6 b0 O5 j/ H9 m* c& r, E上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。% b! ^8 a. b! o$ {+ n# `. M6 f, X: I
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:: ?& X% e: U; y* Q: R; W* @) Q; R
# gpasswd -a galeki cron, Z% I, M% w! H1 s5 K
crontab命令主要有3个参数:' q% X6 L2 z; x* h4 a% @9 b+ g/ u9 n
-e : 编辑用户的crontab。, U2 Q q, F5 H, M! M
-l : 列出用户的crontab的内容。) n( f p t2 K
-r : 删除用户的crontab的内容。( k) V- o7 R6 W$ e6 |( S1 O. N
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。4 R9 M7 t+ e6 X6 _5 U& ^% P% m
crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
0 f+ ^/ C! @* ? |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|