|
在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。0 ?9 i/ T) [1 U# A, \# X6 b
利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq# Q, p, x" G1 a% r8 a% D* \' D; ]
实例讲解:: f5 L/ U6 D; L# u( A$ {0 s- Q! x# x
首先ssh登录你的vps( {* ?: b: ^* C7 W4 D9 J
输入命令:crontab -e
1 J( e; h* g- K ~
6 z5 e9 w9 m$ D出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成2 X7 V0 ^- Y$ S: D
& ]8 F- n9 c" O9 {说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh8 Y) L* Y1 `# D. b: [
代表每3小时执行一次/www/web/目录下的restart_on_502.sh
- H' M- Z- @ l% |* E# |然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
: A7 f2 R Z' D: g+ s$ v8 \7 d表示进入了不可编辑状态可以输入命令,这是我们输入:wq
1 [$ d8 j. x }/ d& M程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l
: L; o/ `& m0 S# X; b6 z% D就能看到我们编辑的定时任务了。
" a1 y: Y) i* r" D: {" ^! v4 G+ v3 @, D) w! j( o' b- N# l
502.sh脚本内容:
{: \/ e9 a( }" W1 o' v8 |2 w2 Z6 S: H) B% i7 X* h# I
#!/bin/bash9 K$ U( B4 O" O
#by admin@cm8.org5 Y. M0 A- o0 P7 O9 d
MY_URL=http://www.funjan.com
' d. S& @6 E1 s0 _4 p6 dRESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
2 Z* Q0 p( a" \if [ -n "$RESULT" ]; then; j) T; U+ u0 X3 B' A' g
#如果502则会执行这里的内容,随便加或改3 j% Z2 B% N. ^7 T/ Y
#reboot
) n* p1 i X* X/ b #...
; ~3 D4 L J9 j, o4 M# l0 }2 n8 T( k /etc/rc.d/init.d/nginxd restart
7 A- o8 N1 |4 x3 [" B+ N# L+ \ /etc/rc.d/init.d/nginxd start
6 @; K5 d( Z! Ffi: w" V; q6 W- g/ I
* W! `$ s9 F8 `' N, m, e% G将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
5 r" ~" _/ Q! b7 [然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。
- F% j2 ~* m$ l$ `6 I
5 w+ E& e& e- K2 z& Z扩展阅读:
1 v0 Z; n) K" d3 x9 ~4 u0 b0 p5 S系统cron设定:/etc/crontab3 f8 z( V# s6 ~2 ~9 q4 f
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
# H2 f+ x$ e8 r6 D0 y9 x, S0 y0 USHELL=/bin/bash
- |5 u! W& w' O, aPATH=/sbin:/bin:/usr/sbin:/usr/bin
8 K+ W9 {7 C( ]MAILTO=root( M* E5 V% Q/ q8 M$ k
HOME=/9 B- Q B% G1 s+ \
# run-parts
) P& i: }( |- F. J$ I01 * * * * root run-parts /etc/cron.hourly. C5 j# g% G5 g* f' ]
02 4 * * * root run-parts /etc/cron.daily) |% s8 [ u+ Z1 G7 t) M# S
22 4 * * 0 root run-parts /etc/cron.weekly
" V, g0 a0 ^) X2 ?42 4 1 * * root run-parts /etc/cron.monthly
: Y7 Q4 a7 k+ ]% _" s7 l
; ?. |4 D" C4 ?2 A1 \以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。7 W/ e8 {4 I0 w* p) C" P# q
真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
& R, h; K4 A5 {2 I/ z第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
: b, l$ M- S" V6 C# G- q第二部分,上面的文件全部是 "root",描述了执行任务时的用户。# L# w4 Q0 s1 i: j. e& z
第三部分,为需要执行的完整命令。, D0 z( j# p$ S6 N
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
0 M7 ~' ^7 v3 p8 u O6 B5 l0 7 * * * root mpg123 ~/wakeup.mp3
. ]# a# l4 ]- r" w, A% F分 时 日 月 周
8 l* s; `$ @' H r% l) T星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~; t8 x* U+ b! y- Q$ M8 d
以下是各部分的取之范围:/ |. y& w6 a* e% \5 x
分钟 0~59
# T) ?/ ~2 `0 e 小时 0~23 8 T" P$ f- ]' y5 a `& I' `
日期 1~31
* ?& y/ o% ? K 月份 1~12 ; h3 ~: @$ u6 |) P
周 0~6
6 P2 S+ T7 }8 N4 N. Q( V其中周的范围0~6,0代表星期天,1~6代表周一~周六。9 S1 n E0 R& v% z$ B0 c
让我们来看更多的例子: V" e, a, |$ M H0 i# W1 h
0 4 * * 0 root emerge --sync && emerge -uD world #每周日凌晨4点,更新系统
5 c" _' Q8 ?9 {/ J' L4 R# f- U7 M0 2 1 * * root rm -f /tmp/* #每月1号凌晨2点,清理/tmp下的文件1 Q" |7 b& G# O# O# W
0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日给robin发信祝他生日快乐
1 D" s; X1 r9 \% j- U8 r6 h' {假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:
, Y+ p7 t; ~* ?' L |- c* \2 J3 T*/2 * * * * root ............... #每两分钟就执行........
- D% Y1 q& i r; x- b8 L0 6,12,18 * * * root ............... #每天6点、12点、18点执行........, f" i* f& D' W4 h
用户的cron: crontab命令
5 W9 l8 o8 p9 s/ X1 X上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
: g5 [8 p9 O$ D/ Z' _; N9 L首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:5 `5 I9 A8 C/ f6 t' T
# gpasswd -a galeki cron
; x8 i- W m5 ?3 W4 Hcrontab命令主要有3个参数:
0 v- G N4 W7 s# |; \1 W. a-e : 编辑用户的crontab。& b4 m! [* w, v) X
-l : 列出用户的crontab的内容。
: n' g9 X4 `7 v-r : 删除用户的crontab的内容。! Z) @- ^2 z) c4 }) N. }- m
执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。3 @% E) \' M7 `7 i! f5 ]' _' V
crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
& `" p) D) H( t& }; i) @+ A1 F |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|