自己運(yùn)維水平一般,服務(wù)器也沒有備用的荚坞,偶爾down機(jī)了挑宠,自己在公司還好恢復(fù),有時(shí)候不在颓影,還真難搞各淀,總結(jié)了一下服務(wù)器最近down機(jī)原因,基本都是被惡意攻擊拖垮了诡挂,只能怪自己水平有問題碎浇,暫時(shí)就想到寫個(gè)腳本優(yōu)化一下临谱,以代替自己不在公司時(shí)能恢復(fù)服務(wù)。
首先學(xué)習(xí)了下Nginx對(duì)IP的限制奴璃,給單個(gè)IP加了個(gè)請(qǐng)求速率的限制悉默,超出速率的,返回599苟穆,這樣限制后發(fā)現(xiàn)能很有效了避免服務(wù)崩潰了抄课,由于服務(wù)器是單核的,CPU在異常訪問時(shí)還是會(huì)接近100%雳旅,所以在想如果吧這部分ip查出來(lái)禁掉跟磨,再檢查一下uwsgi狀態(tài),不正常就重啟下攒盈,應(yīng)該可以吧抵拘。
腳本思路大致如下:
1,檢查最近的2000行access.log,如果都在1分鐘內(nèi)沦童,而且單個(gè)IP返回599狀態(tài)的請(qǐng)求數(shù)大于100仑濒,就將此IP禁止訪問,
2偷遗,訪問web url狀態(tài)墩瞳,如果返回不是200,就重啟uwsgi
單獨(dú)腳本測(cè)試時(shí)都還正常氏豌,但是當(dāng)放到cron中時(shí)喉酌,居然出現(xiàn)uwsgi命令無(wú)法使用。泵喘。泪电。
由于使用了pyenv,估計(jì)也是找不到對(duì)應(yīng)的uwsgi吧纪铺,折騰了好久相速,終于找到解決辦法,在腳本中加入
PATH=/usr/local/.pyenv/shims:/usr/local/.pyenv/bin:$PATH
加入pyenv的環(huán)境變量鲜锚,就可以了突诬。
后來(lái)查詢了資料,應(yīng)該是說(shuō)cron的環(huán)境變量是系統(tǒng)的芜繁,不包括用戶設(shè)置的變量旺隙。