|
|
在nginx中502错误一般是php罢工造成的,但有些特殊情况,我们用nginx镜像了一个动态ip的站点,每当这个站点更换ip我们nginx镜像源站的站点便会出现502错误。分析原因是由于nginx在反向代理过程中缓存了动态域名dns而且很难自动更新,当我们重启nginx服务dns缓存会被更新。' G `& O, `# [9 q# l! B
利用这一点我做了一个脚本当检测到镜像站点出现502错误便自动重新启动nginxd服务。当我想把这个脚本利用crontab -e加入到定时任务列表时我竟然不知道如何保存退出,其实命令很简单是:wq
* U) E& E4 K! k) j实例讲解:
1 z; J9 h' x7 @# Y首先ssh登录你的vps
% \" C3 c' D/ I6 |- }3 F3 K输入命令:crontab -e( s9 X( A$ w, c( F3 _
0 S, F1 a! ~# b$ s
出现如上图所示,按键盘上向下的箭头将光标跳到没有文字那一行然后再按两下c键(其他键也行)最下面变成
6 y1 C$ h! m2 e
7 {, w6 x U$ l! X* j* a说明进入了输入模式,输入(必须手动输入不能粘贴否则会出问题):0 */3 * * * /www/web/502.sh
8 H" q4 o6 c8 O2 u/ m6 J代表每3小时执行一次/www/web/目录下的restart_on_502.sh
4 z. Y |$ n$ p* k- G2 l# p3 b; Q然后按下ctrl+o键,窗口尾部的-- INSERT --变成-- (insert) --
8 E. o, G5 X. V9 H表示进入了不可编辑状态可以输入命令,这是我们输入:wq* t0 X2 f/ D0 R
程序就保存退出了。然后我们在ssh命令窗口中输入:crontab -l* y& w, z9 x7 {: `
就能看到我们编辑的定时任务了。
* i6 m: @& l9 v
: C- X: g/ W3 G+ T/ G' j, e' E X502.sh脚本内容:, _8 V5 B6 u+ M0 Q3 [, l" m* M
7 i/ V$ O' w H' Q# m# |* B, u5 n
#!/bin/bash
4 }/ ?8 F, g* O' A2 _ f#by admin@cm8.org
9 P: |# M1 A% \2 o( Q/ D$ xMY_URL=http://www.funjan.com. f' }" K" o2 V/ B7 N0 I
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`% U3 q( ~5 N/ K- N6 j) x
if [ -n "$RESULT" ]; then
; `# T% B: X% J+ p #如果502则会执行这里的内容,随便加或改% p7 L1 N: @2 K( l e S7 b
#reboot
( T; f( K0 x2 B H) V0 Y! g #...! T( q6 \- [8 O0 ]
/etc/rc.d/init.d/nginxd restart5 u) O* X5 y8 L( w5 D
/etc/rc.d/init.d/nginxd start% d. A) j$ r/ a$ d3 J
fi
8 L) o R# I! ? h( L- L. X) |1 Y+ h
将MY_URL="http://www.funjan.com"中的网址改为你镜像站需要监控的url就行了
1 y4 M. W/ t' ]+ C# t* o然后将502.sh脚本文件上传到vps的/www/web/目录下就行了。. D1 J" l- T, G/ v
; _6 T* T" \0 e& k6 {( u6 c# `
扩展阅读:2 T7 P1 G$ R) V2 ?" Y, W8 d
系统cron设定:/etc/crontab- g: ?" J9 B# p2 ]
通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。2 i( ?# C1 [9 N* b6 e1 R5 s5 A7 O3 H
SHELL=/bin/bash8 g/ F# \8 y$ A& T" D; G
PATH=/sbin:/bin:/usr/sbin:/usr/bin& Y( B2 ` x9 e, m) u$ D3 m" I
MAILTO=root
3 r9 ]3 l. z4 f; eHOME=/
! i4 }' M! n; B: n+ R# run-parts
& i: b3 }: U' g01 * * * * root run-parts /etc/cron.hourly
8 [# @2 S2 l3 w02 4 * * * root run-parts /etc/cron.daily
1 Y* d# A; f& K' a" \# I2 S7 j22 4 * * 0 root run-parts /etc/cron.weekly. x7 D9 t$ C+ s5 c7 O( \( {
42 4 1 * * root run-parts /etc/cron.monthly
4 l$ B9 ?; O/ S0 }3 g' N4 c4 @3 {9 `6 t0 Y4 R
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root 指出出错信息发给root。
' i1 Q* `. F9 e7 D5 m0 D3 s4 H3 `* _真正描述执行的任务在 14~18 行,每行代表了一个定期执行的任务,从前到后,分为3部分:
3 q7 z5 h& _1 B9 F% H第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。. T9 W' v; B( ~' |* P j
第二部分,上面的文件全部是 "root",描述了执行任务时的用户。
: A/ [7 t, ?. E第三部分,为需要执行的完整命令。
0 [% O9 m" ~" K; u8 z第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:. r2 P: t$ `) Z: x
0 7 * * * root mpg123 ~/wakeup.mp3 3 Y' D' G* L3 }' L- n
分 时 日 月 周
& h& j( S# c4 i! C `/ Q; ?星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123 ~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
% A# ?8 J' T7 ~以下是各部分的取之范围:0 ?5 g6 C$ e+ [- p; \/ j
分钟 0~59
% v$ p+ b' I6 G" `, g- w! K 小时 0~23
4 a4 X% W% ^& Q% v9 {1 @$ k O 日期 1~31
" b" q6 V! s: w5 ]. t1 Q4 |0 ~( v 月份 1~12
* Q5 M5 @; w! m' U$ g+ P5 R% K( } Y周 0~6 + L' L2 j# k5 S3 b
其中周的范围0~6,0代表星期天,1~6代表周一~周六。$ S# F- t5 b9 D) F7 I+ Z8 Z, c
让我们来看更多的例子:# I7 w2 A3 \" L
0 4 * * 0 root emerge --sync && emerge -uD world #每周日凌晨4点,更新系统
4 { f5 I3 ~( l7 C' k# J8 @1 H0 2 1 * * root rm -f /tmp/* #每月1号凌晨2点,清理/tmp下的文件
8 _% t1 W$ c+ }4 A0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日给robin发信祝他生日快乐. o; v8 @4 O9 h p; _" l
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:
& ^5 g& ?8 M5 w2 J4 e% U$ o*/2 * * * * root ............... #每两分钟就执行........4 r/ g( ?, j7 \, k5 j
0 6,12,18 * * * root ............... #每天6点、12点、18点执行........
/ F$ _0 w: G7 f8 L: U: \用户的cron: crontab命令
" q6 k0 K& y; q, O$ t3 Z1 n% `上面我们提到的 /etc/crontab 文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。9 @# K# Q% v6 ^3 h }$ V
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
- _. i7 m* F2 q# gpasswd -a galeki cron3 `! G0 o! g7 {* Z0 F% t) N. a& u
crontab命令主要有3个参数:- U) c8 D& |3 J: e5 V4 m
-e : 编辑用户的crontab。
+ x7 E! n; b. I$ C4 r$ O2 U( k-l : 列出用户的crontab的内容。; y$ S: R' }4 \, _) O2 H/ N
-r : 删除用户的crontab的内容。
" c$ u2 K: P- U7 d1 {执行crontab -e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和 /etc/crontab 文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
9 q& G* P" @4 L/ s9 a- `( Ucrontab -l用来查看自己的crontab文件内容,crontab -r删除自己的crontab。" D3 f. L, a$ y2 P( B& }- A
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|