|
|
在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。# G# r) o& ~1 _/ ^7 `, `
利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq$ r7 b/ ~. I3 T% k8 ^7 S4 C
实例讲解:2 D$ s) D- z" E& E" \, n) @
首先ssh登录你的vps
6 ~8 P& |- ^# T0 M& P( ?输入命令:crontab -e
- D9 W" T) a7 W A# w$ i% a7 z+ x/ S5 b0 n) E( x+ `/ ^; e
出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成6 r% I3 c. q4 H% x. E
9 Z0 {5 j% l2 A9 p& v; t/ _
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh$ a' Z3 L4 [9 U; q% z
代表每3小时执行一次/www/web/目录下的restart_on_502.sh
( S- [6 q3 A- ?; C, T: B9 T+ _然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --; A I3 q, D+ s+ U- F
表示进入了不可编辑状态可以输入命令,这是我们输入:wq
. D/ E+ x9 U% |$ y3 q程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l" ~4 |: d C3 B) u* B4 p0 q3 o8 [
就能看到我们编辑的定时任务了。7 |* |5 o& d5 N* z- u1 a0 @
! i" z6 U- F3 F. u/ x& b
502.sh脚本内容:
% e( D4 `" I1 s6 w* e' E, ^2 ?9 l$ h' h% @$ W9 y
#!/bin/bash" y' V5 }8 S- X
#by admin@cm8.org
8 ]- `0 A j9 ] J' u: G* NMY_URL=http://www.funjan.com' S4 I3 h5 Y8 d+ O# F4 \) [& B" F* r
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`# R7 w5 D0 y+ p
if [ -n "$RESULT" ]; then
9 l6 `; R8 V R: ~ #如果502则会执行这里的内容,随便加或改& M6 N8 g( X1 S4 b3 \
#reboot# y" r; u4 j/ M; n/ J$ \
#..., |1 L' Y* A' v; o$ m6 [5 H, e
/etc/rc.d/init.d/nginxd restart( I- N/ ^) ^; c; h
/etc/rc.d/init.d/nginxd start
9 N; I6 a% E9 u4 L7 H$ ]fi2 ] F, u1 C. e' Z. b
$ Y0 s# X5 V1 F: k1 C将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
( {( d$ F1 @4 n1 y: o然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。 a5 x0 p' c) |* v) S
! }) j5 N+ I2 C7 H4 D( M扩展阅读:
& i5 M* v8 U' d+ @系统cron设定:/etc/crontab
" z8 H! O3 N+ e3 R z# |通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
2 x+ J4 o( T/ p8 YSHELL=/bin/bash6 H0 C. d; Q( Z: A, Q: A# B( \8 V
PATH=/sbin:/bin:/usr/sbin:/usr/bin
8 V6 G& X# s# [( @% H7 c5 {) }MAILTO=root
, q: R( E( B4 u( d- \, T A9 BHOME=/
% \! W+ z! n% L# run-parts
9 S2 c0 I- s- M01 * * * * root run-parts /etc/cron.hourly
1 Z* W) R$ ]' C' z4 p. L* T6 X" [( }02 4 * * * root run-parts /etc/cron.daily
Y0 }" `" c0 G" L" J( y' c# M22 4 * * 0 root run-parts /etc/cron.weekly
& ]# p# _+ O8 R! ^+ P5 b. T42 4 1 * * root run-parts /etc/cron.monthly
* l- q: {8 X. m' L6 X: `8 S7 d; E& C0 S7 c7 ]
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。; [) K d& X0 k/ m3 [# r
真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:$ X( ? a }9 q R1 ^3 k
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
- W- ~+ j! w# ]( x' G, v0 ^4 s3 y第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
8 S8 k: s7 m' s! R第三部分,为需要执行的完整命令。" T7 I# B8 B3 i7 m y8 X& J
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
1 N- V }) c% p+ s$ s, i, i" B6 ?$ m0 7 * * * root mpg123 ~/wakeup.mp3 + f% S0 f, ^; Q/ g6 g' R
分 时 日 月 周1 \6 D2 H( W* b4 I3 l; K
星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
/ G4 a. `$ d' J7 Z# y: f; ?以下是各部分的取之范围:
' O4 K2 p3 n3 @. I2 x* \ 分钟 0~59 : b) u% g" C2 r
小时 0~23 0 I5 Z5 u5 \$ k, t) y! d: k
日期 1~31
/ K& x: x1 _0 \, m9 s9 g 月份 1~12
; T6 @! R( l! k# W5 K$ O. g周 0~6
& k# e: N d# a其中周的范围0~6,0代表星期天,1~6代表周一~周六。4 a. u3 z* X- F* P
让我们来看更多的例子:
" H$ Z1 z1 z9 A5 w4 h0 4 * * 0 root emerge --sync && emerge -uD world #每周日凌晨4点,更新系统
/ P4 t2 W7 y/ q0 2 1 * * root rm -f /tmp/* #每月1号凌晨2点,清理/tmp下的文件3 H2 J3 F$ I. x! C5 B7 s
0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日给robin发信祝他生日快乐
0 U/ S1 R9 @* E6 Y$ K G假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:
% A% ~# A$ e8 a7 A* Y% W*/2 * * * * root ............... #每两分钟就执行........$ Q$ c4 K. u1 s' m6 Z5 k# d
0 6,12,18 * * * root ............... #每天6点、12点、18点执行........, E9 o4 C* i. Z( f$ l$ B
用户的cron: crontab命令& \% J6 k: z4 B6 u3 y, [
上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。8 p& @1 t9 y$ K: b$ ?- ^! @# [
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:* d( @" G V% E/ T1 R H
# gpasswd -a galeki cron
+ c/ c" |& b g8 o6 O6 H2 Ccrontab命令主要有3个参数:$ U: M: x2 v7 o
-e : 编辑用户的crontab。5 u0 O0 F* k2 _
-l : 列出用户的crontab的内容。
% J: a+ Z2 } l) y2 I' N-r : 删除用户的crontab的内容。% c9 D: G9 q, ^/ `/ Q
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。* q' m1 O+ N5 g0 f
crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
: T3 C- t" {+ [- d- r |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|