自己运维水平一般,服务器也没有备用的,偶尔down机了,自己在公司还好恢复,有时候不在,还真难搞,总结了一下服务器最近down机原因,基本都是被恶意攻击拖垮了,只能怪自己水平有问题,暂时就想到写个脚本优化一下,以代替自己不在公司时能恢复服务。
首先学习了下Nginx对IP的限制,给单个IP加了个请求速率的限制,超出速率的,返回599,这样限制后发现能很有效了避免服务崩溃了,由于服务器是单核的,CPU在异常访问时还是会接近100%,所以在想如果吧这部分ip查出来禁掉,再检查一下uwsgi状态,不正常就重启下,应该可以吧。
脚本思路大致如下:
1,检查最近的2000行access.log,如果都在1分钟内,而且单个IP返回599状态的请求数大于100,就将此IP禁止访问,
2,访问web url状态,如果返回不是200,就重启uwsgi
单独脚本测试时都还正常,但是当放到cron中时,居然出现uwsgi命令无法使用。。。
由于使用了pyenv,估计也是找不到对应的uwsgi吧,折腾了好久,终于找到解决办法,在脚本中加入
PATH=/usr/local/.pyenv/shims:/usr/local/.pyenv/bin:$PATH
加入pyenv的环境变量,就可以了。
后来查询了资料,应该是说cron的环境变量是系统的,不包括用户设置的变量。
网友评论