|
|
在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。2 X* y& _* b- g# b0 B
利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq6 @1 p. [/ w$ }4 e7 z4 \
实例讲解:# K! j5 a7 }8 ~9 X
首先ssh登录你的vps
9 j# @6 H+ a5 n; A! J8 H2 B$ m: g! C- g输入命令:crontab -e
1 P4 |$ V2 B$ H* X9 E, N: ]1 V9 b$ Y
出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
* i0 ?' B4 ^5 I9 D- X. f! l- j8 L9 ?; e) I& ?0 G0 v5 |& _
说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh0 H) Z- D- k; R
代表每3小时执行一次/www/web/目录下的restart_on_502.sh
9 y& Q5 s6 G/ H. R然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --( `! j/ t+ `7 ]( Y; P. M
表示进入了不可编辑状态可以输入命令,这是我们输入:wq* {7 u* e5 h v w
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
% F3 M5 x: [4 j% J7 F就能看到我们编辑的定时任务了。
" F& M X$ _+ P2 d U8 }8 i% Y9 G w# Q# w* K# M7 Z: w; {* b% m' f
502.sh脚本内容:
* i! q+ v' n7 m+ i; R1 T/ ]. T
" L0 A1 S3 u' v; {4 B7 ?#!/bin/bash$ o6 J6 f0 ^9 w2 {
#by admin@cm8.org+ I) ^5 D0 O$ _% \: N3 m
MY_URL=http://www.funjan.com
: a) A/ ?: z0 C0 D2 Z" B NRESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`% n; f- F! Z' }& b' q5 M+ n! P
if [ -n "$RESULT" ]; then
4 \. P4 r; E: A) W #如果502则会执行这里的内容,随便加或改
" t/ s# r }' u #reboot, \* h& E! Z# i) L& c6 t! |
#...4 H; u! ?+ R8 N9 E- W/ w o# q
/etc/rc.d/init.d/nginxd restart1 U# I$ i+ m% ]5 p5 X4 ?, a& j( Y2 m7 E- `- V
/etc/rc.d/init.d/nginxd start; e7 B: v6 L& v6 }
fi& W1 C) f2 {5 |! Y5 D0 W. t
- G: s1 u( L1 j I将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了! Y, D9 T3 e# d* U0 \8 n4 E
然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
2 X1 h: a3 T7 ^/ H* |% l( b
# \! l. g* U4 e! H, S; {4 `扩展阅读:2 A& E8 x: F4 p& o
系统cron设定:/etc/crontab
8 a9 f) r* g2 U7 O* n0 Q通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
z. p! \) B: V, @$ i: ?! QSHELL=/bin/bash( `3 z3 \5 B& [1 t( x( o
PATH=/sbin:/bin:/usr/sbin:/usr/bin
/ j. ]# R7 [5 WMAILTO=root
: P, z* Y; L% K# WHOME=/
$ ~, f' D- Q4 t+ r& d, b: f( ^. I# run-parts$ u* h% b" o9 D! t. ~
01 * * * * root run-parts /etc/cron.hourly" c$ M3 r, B! r: |' ^( |) c
02 4 * * * root run-parts /etc/cron.daily7 F$ [2 y8 t8 `! J4 p# g
22 4 * * 0 root run-parts /etc/cron.weekly7 f! }" ?% }/ ]3 @
42 4 1 * * root run-parts /etc/cron.monthly
7 }/ \" _2 a9 J. @7 W( u+ T
( E e0 v4 _5 A g0 X O# X T9 ]以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
! f9 J" v# z; q/ L4 q" ^% X G- x真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:/ p- u, f5 o6 d9 G8 m
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。3 S$ k9 _$ D6 M# f @
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。! g4 k+ z8 H- F
第三部分,为需要执行的完整命令。
0 u' f; F+ U0 f5 \第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
4 T9 k3 n; i( C. ?7 E0 7 * * * root mpg123 ~/wakeup.mp3
' Z/ |* G6 o: ?分 时 日 月 周
# ?/ h0 r i+ p W星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
& u6 J. w Q* R1 s$ F- S7 x7 G+ D以下是各部分的取之范围:) _( _+ X/ A& E% Q- Z6 z
分钟 0~59
, h) J0 @9 w; j- `! n 小时 0~23
. {6 c% M0 [5 k 日期 1~31
# T, v& j" g0 o+ p Z3 ? 月份 1~12
5 {1 |0 O: o" }/ w周 0~6
/ }- R3 q! z5 ^其中周的范围0~6,0代表星期天,1~6代表周一~周六。3 ]/ x& C; h3 k+ ~- E
让我们来看更多的例子:' v) W1 f6 ~; Y
0 4 * * 0 root emerge --sync && emerge -uD world #每周日凌晨4点,更新系统
. ^. D! Q1 a. T' s0 2 1 * * root rm -f /tmp/* #每月1号凌晨2点,清理/tmp下的文件# W1 f" l" J; D
0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日给robin发信祝他生日快乐
: P9 \( Y7 h+ M! I" j假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:. h V; g# U4 n& I* y1 A0 D
*/2 * * * * root ............... #每两分钟就执行........! o- D# y% q$ r& t* K" C
0 6,12,18 * * * root ............... #每天6点、12点、18点执行........& ], G* i f5 e" q: l0 t: z
用户的cron: crontab命令
) ]* y4 X( N4 ^6 J- u上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。) k6 F. M4 n7 n
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
2 G9 d D) P e1 @5 ^# gpasswd -a galeki cron
8 T3 A) S; C/ l& O7 p4 L* t8 ocrontab命令主要有3个参数:
! l" |1 [2 F6 Z* J0 q& ~-e : 编辑用户的crontab。
1 J; o! |8 x6 q5 Q5 v: Y/ l, E. t-l : 列出用户的crontab的内容。
+ z4 Z: ~* `2 p-r : 删除用户的crontab的内容。% i9 _5 C- `$ h+ u
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
/ O; j) m/ F# y6 A4 G( W4 v; xcrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。- x; X. w6 d( y! ~' V J
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|