前言
最近服务总是被CC导致nginx崩溃,服务不可用
于是写了个脚本实现nginx崩溃重启
安装依赖
yum install -y mailx sendmail
配置mail
mail配置文件为/etc/mail.rc,用户级配置文件为~/.mailrc。这里使用全局配置文件,在/etc/mail.rc文件最后添加如下内容:
set smtp=smtp.qq.com:587 # 这里填入smtp地址,这里的xxx为qq或者163等,如果用的云服务器,安全组策略要开放465/25端口,入站和出站都要开放该端口
set from=xxx.com # 设置发信人邮箱和昵称(可以随便取)
set smtp-auth=login # 认证方式
set smtp-auth-user=xxx.com # 这里输入邮箱账号
set smtp-auth-password=password
#Monitor nginx service
#判断是否root用户运行
if [ $(id -u) != "0" ]
then
echo "当前用户不是 root 请使用root用户运行"
exit 1
fi
netstat -anop | grep 0.0.0.0:80
#判断80端口服务是否正常
if [ $? -ne 1 ]
then
exit
fi
echo $(date +%T%n%F)" Restart nginx Services " >> nginx.log
#启动nginx
/usr/local/nginx/sbin/nginx
#发送邮箱预警
echo 'nginx已崩溃重启' | mail -s 'nginx警告' xxxxx@qq.com
然后我们添加定时任务
crontab -e
每5分钟检测nginx服务是否正常
*/5 * * * * sh /usr/local/nginx/sbin/nginx_restart.sh
当然这个只适用于普通方式部署的nginx对于docker部署的,需要自行调整代码