|
|
在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。
1 T! ~! y$ s7 c6 @ 利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
. y; R- O" _! D! i U实例讲解:0 c5 T: s5 i& z+ z u
首先ssh登录你的vps+ c3 z* f/ X; N) z
输入命令:crontab -e, m; H* l1 n3 c# ?4 l
; B" t2 x/ ]# {出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
/ d3 o) r3 C! D" v8 [! x, R+ Z9 C
: C6 _. b5 }! R" V* F& g说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
5 O/ i6 W4 t8 a) ]5 u代表每3小时执行一次/www/web/目录下的restart_on_502.sh
- J. D$ r, r* Z然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --, W% K* O) L( L9 V% P, q
表示进入了不可编辑状态可以输入命令,这是我们输入:wq
7 y9 Z$ R" r+ E- [5 s7 H' F程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l8 |0 P: V" L& c0 i+ l
就能看到我们编辑的定时任务了。" Y6 z. ?1 H3 j4 D% F8 ]. W
4 D& P2 i/ \3 U& B- L
502.sh脚本内容:* U: T3 o- L w7 m! t
8 o- I- v" @, a b8 N0 u- Q* H9 \; R
#!/bin/bash
3 X2 B" _! d9 y2 K% [, m#by admin@cm8.org
5 k& s# v8 q0 o `( v GMY_URL=http://www.funjan.com9 u7 @: d0 f+ C# y, U
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`" a' D8 u- B( T
if [ -n "$RESULT" ]; then) Q5 Z% X! Q( H7 F! x
#如果502则会执行这里的内容,随便加或改4 ~& b2 _( G# W! X% s" D# B, E9 r
#reboot
* N0 S& ~: {4 E1 o; D #...7 Z$ q& R/ x4 p7 H# D3 H4 w1 S
/etc/rc.d/init.d/nginxd restart
( w, ^% d0 ]! \ /etc/rc.d/init.d/nginxd start
7 k' t" B G6 K6 g: M: }fi
; h( U! z7 R. D ~% t5 H0 c$ D
" C1 r( a: c" x4 V, P将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
* Z( E' b# A8 p {/ O然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。$ K( Z# z4 k; W; ^4 ~
2 Z( f1 c6 p7 p7 l扩展阅读:8 |; y% j% R" G' ~
系统cron设定:/etc/crontab$ \; f! y. u1 b, C4 u- Q& H' U- ^
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
$ P, ]- `& K. {' V1 ~( [) q7 jSHELL=/bin/bash
# K+ F! U/ D( f! i4 ~+ aPATH=/sbin:/bin:/usr/sbin:/usr/bin5 e+ D7 d; E6 j& M4 g
MAILTO=root
, F( ? l! u* T5 p: DHOME=/
$ W1 J6 K2 q; n* P+ ~ V# run-parts
: B; s; _$ W e01 * * * * root run-parts /etc/cron.hourly
* U* B1 q- U9 e1 G- h7 P% A' `02 4 * * * root run-parts /etc/cron.daily
, v) ]. m& m/ e! R/ P: z s5 H22 4 * * 0 root run-parts /etc/cron.weekly
: V; j# \- W2 Q, t: K; z+ r' N42 4 1 * * root run-parts /etc/cron.monthly
3 Z9 H ?* w! Z* R! E m$ Y* g/ n' {$ R2 p
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。* u) p7 U% T7 {5 M( H5 W
真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
+ }* A9 R$ ~8 x第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
# d! m1 v- E5 n* ^ J# J z第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
' j6 K. M1 @ W, p/ J0 n! E4 W第三部分,为需要执行的完整命令。
. ]; w* x F& ~. |- l, X6 q1 I" i0 Y第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
1 e1 p: }( E6 s: h9 S0 7 * * * root mpg123 ~/wakeup.mp3
& I$ x0 ]0 h5 R$ l" ~分 时 日 月 周7 ?2 c' |7 w+ J* A+ k2 L- c: S
星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
! t/ l! O' B) B以下是各部分的取之范围:
+ k# C' S9 p0 U- y1 y, s 分钟 0~59 % ]5 ~ j) J6 O
小时 0~23 % E% l+ G* g5 ]
日期 1~31
2 u5 H7 \6 \; M; C! Z 月份 1~12 ) {- C* ^0 n: x( t! S
周 0~6
7 ^- R1 Z. o% E8 c: s7 `! W其中周的范围0~6,0代表星期天,1~6代表周一~周六。
( Y L$ H. ]5 x1 E! Q让我们来看更多的例子:
4 ?3 M3 m- d3 m# k3 g0 4 * * 0 root emerge --sync && emerge -uD world #每周日凌晨4点,更新系统
. [8 v! M9 L) ?% |0 2 1 * * root rm -f /tmp/* #每月1号凌晨2点,清理/tmp下的文件
' N0 f$ K% M0 C: R: Q) D0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日给robin发信祝他生日快乐! w& p5 y: K! A9 T3 M+ y
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:1 c& Z1 V! E- _+ Q: r$ [ R! n
*/2 * * * * root ............... #每两分钟就执行........1 s' z" M& ?6 Q& M
0 6,12,18 * * * root ............... #每天6点、12点、18点执行........; e f/ h. R1 \+ E
用户的cron: crontab命令
3 c ?5 @, V1 i p上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。+ Y8 [" F5 q7 Z3 D( N5 J
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
% d9 [" v) ]' I& @/ H4 E: O E. l5 z# gpasswd -a galeki cron
: ^( n- g9 i7 g; f) a' ?; _1 q9 zcrontab命令主要有3个参数:
% s* C$ v* x& i, D. x-e : 编辑用户的crontab。! Q' x8 z7 {6 @& r* V
-l : 列出用户的crontab的内容。0 k( `2 x" G6 Q3 s5 N/ z
-r : 删除用户的crontab的内容。
+ a: t6 E& z& Y7 R# J9 `执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
( \1 o' q) G; C2 Q$ W+ W) D6 |crontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。
7 ?! }* U; J1 G; z |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|