|
在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。+ s. H* y( S0 c$ f) O" P# b
利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
- g6 R! O/ I& `0 X实例讲解:
3 C8 r6 ?' \# f' S/ `首先ssh登录你的vps
0 ^6 f- x! q8 b0 b6 C. t! M$ j+ @输入命令:crontab -e
: N B2 t! i4 f2 l
. |2 D0 U! @7 H% g/ P出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
2 n6 p2 L& x3 w0 j) F$ J& e4 m! H8 Y& `2 h* I0 e
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh# M" ^. g" S6 V/ `! W" H* B
代表每3小时执行一次/www/web/目录下的restart_on_502.sh
Z$ N; }7 G& R6 U: z) x) X5 D6 l然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
+ i# f# I9 h: n* u1 J表示进入了不可编辑状态可以输入命令,这是我们输入:wq% @8 w5 b8 x1 k2 X5 r) s1 C$ ?
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l- ^1 J: }9 ]: Z4 n$ B; a
就能看到我们编辑的定时任务了。" x; s3 r. q4 q7 M9 m
3 R% O9 v0 F$ ]/ k; m6 p502.sh脚本内容:
. h. y) q8 B @1 h: ?) N P( ^$ k) K! A) C& U- A- t0 H
#!/bin/bash
% ?( x& t* R# v1 x6 e, ~- M#by admin@cm8.org1 V1 [/ u9 e/ U, j
MY_URL=http://www.funjan.com
2 F; C5 u8 e h2 @! p* A9 \* L# dRESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`$ G4 g5 J/ J u5 {
if [ -n "$RESULT" ]; then
2 ` Q* R5 N9 _3 @/ [" K. R7 G8 l- Y #如果502则会执行这里的内容,随便加或改5 K& \! s# B) N% y9 L
#reboot
8 s6 Z* _" I' o$ e( R; O- h, h #...
' U# M& z' z v+ J /etc/rc.d/init.d/nginxd restart
2 j- j! X- f- f( p& N# ^9 ?. a& m( n /etc/rc.d/init.d/nginxd start l8 w$ Q+ R; x# Q6 Q; ]( Q/ l, e
fi
8 ?- `2 C9 I1 y2 u8 l
- C$ [: Y, R: B0 c将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
0 F% K* v, }) _& c) S/ D1 D然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
0 @7 w d: z$ c+ r4 F5 \
7 b) i! [, @$ B& s7 q( S扩展阅读:
; I* n! V* _. K! n系统cron设定:/etc/crontab
) j: Z) D) R7 }' w/ g通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。4 }6 l+ ]& U% M
SHELL=/bin/bash8 N L9 F9 ^+ P4 S8 g3 o: q( _* ^
PATH=/sbin:/bin:/usr/sbin:/usr/bin
& z! b$ o9 g% }% E# kMAILTO=root
! p( J ^- ]1 oHOME=/: }. I) {( x+ _ k, ^8 i
# run-parts
9 _7 s. Q U1 h" O% u2 T01 * * * * root run-parts /etc/cron.hourly( @/ S& M# H% m4 U
02 4 * * * root run-parts /etc/cron.daily& o3 }( D) X2 J9 v- W
22 4 * * 0 root run-parts /etc/cron.weekly
) b4 q- P( a& _1 ^# B42 4 1 * * root run-parts /etc/cron.monthly3 s5 R: r y3 R, ^, T0 i* W
0 k2 b9 _2 \' q7 @4 o$ |以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
9 G6 _8 o r' i' I真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
$ N5 s, x; p: ^3 j) m' A第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
: ?# l$ t6 I+ n5 l g第二部分,上面的文件全部是 "root",描述了执行任务时的用户。. y- k4 s' h2 S" m& a h2 ~5 _& g2 y0 K
第三部分,为需要执行的完整命令。. r- H0 b# A7 k% J
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:/ F5 q2 e/ {1 s8 U
0 7 * * * root mpg123 ~/wakeup.mp3 - v4 O9 l2 G. E% R y0 ]% d
分 时 日 月 周& R. h6 ~- G1 Q! Z/ l$ ]
星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
' |9 [$ D* k5 s+ k7 _! G7 r以下是各部分的取之范围:& D9 j h6 H8 v' _0 L2 E
分钟 0~59 $ B6 Z# M& v/ u3 ^. i8 N. |' I
小时 0~23
% |+ B" q% ]/ I 日期 1~31 ' I% J$ T, {: P1 A- c* j3 t
月份 1~12
0 b3 C0 Y& L3 I* X6 \% u- _周 0~6
1 L; `( j1 a2 D# w- T/ X _5 S其中周的范围0~6,0代表星期天,1~6代表周一~周六。
& z# y5 K2 w% H5 @. s' X( d让我们来看更多的例子:$ o: \5 N; [1 i3 |/ Y1 r! ]# @
0 4 * * 0 root emerge --sync && emerge -uD world #每周日凌晨4点,更新系统
: a" b4 Y# D# b( o8 D8 u0 2 1 * * root rm -f /tmp/* #每月1号凌晨2点,清理/tmp下的文件# z, R8 {% D2 O# ~
0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日给robin发信祝他生日快乐3 h' S" l. K7 V! Q( U
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:2 {1 f% K$ y) v: p( L7 s
*/2 * * * * root ............... #每两分钟就执行........0 w' `/ k/ ]. ~" E
0 6,12,18 * * * root ............... #每天6点、12点、18点执行........8 ^) L5 |$ b% J' h
用户的cron: crontab命令7 v6 b* |* h4 h1 k! ]! s5 n
上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
! J$ z7 C6 {: Y8 @& l* }7 y首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:; H9 S1 ^, Q+ x T
# gpasswd -a galeki cron( @* Z7 l- }6 Y3 M O6 j
crontab命令主要有3个参数:; L0 [% c3 R8 o7 G
-e : 编辑用户的crontab。
6 R& ]% T1 S J# V) T7 c-l : 列出用户的crontab的内容。& M, d( o/ ~& M
-r : 删除用户的crontab的内容。# t5 _5 [: y" }+ g; }& S. h; W
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。9 |6 ^) y# A5 W/ |1 K5 Q
crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
1 x9 ~8 q/ g6 ^& R0 C% a |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|