我来介绍几种监控Nginx服务状态的Shell脚本方法:

基础进程监控
#!/bin/bash
# 检查nginx进程是否存在
if pgrep -x nginx > /dev/null; then
echo "Nginx 服务运行正常"
else
echo "Nginx 服务未运行"
# 启动nginx
systemctl start nginx 2>/dev/null || /usr/local/nginx/sbin/nginx
fi
HTTP状态码检测
#!/bin/bash
# Nginx访问地址
URL="http://localhost"
# 检测超时时间(秒)
TIMEOUT=5
# 使用curl检测HTTP状态
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout $TIMEOUT $URL)
if [ "$HTTP_CODE" -eq 200 ] || [ "$HTTP_CODE" -eq 301 ] || [ "$HTTP_CODE" -eq 302 ]; then
echo "Nginx 服务正常 (HTTP $HTTP_CODE)"
else
echo "Nginx 服务异常 (HTTP $HTTP_CODE)"
fi
完整监控脚本(包含告警)
#!/bin/bash
# 配置参数
NGINX_BIN="/usr/sbin/nginx" # nginx二进制路径
NGINX_PID="/run/nginx.pid" # pid文件路径
CHECK_URL="http://localhost" # 检测URL
LOG_FILE="/var/log/nginx_monitor.log" # 日志文件
ALERT_EMAIL="admin@example.com" # 告警邮箱
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 发送告警
send_alert() {
local subject="Nginx服务告警"
local message="$1"
echo "$message" | mail -s "$subject" $ALERT_EMAIL
log "告警已发送: $message"
}
# 检查进程
check_process() {
if [ -f "$NGINX_PID" ]; then
PID=$(cat $NGINX_PID)
if kill -0 $PID 2>/dev/null; then
return 0
fi
fi
if pgrep -x nginx > /dev/null; then
return 0
fi
return 1
}
# 检查HTTP响应
check_http() {
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 $CHECK_URL)
case $HTTP_CODE in
200|301|302)
return 0
;;
*)
return 1
;;
esac
}
# 重启nginx
restart_nginx() {
log "尝试重启Nginx服务"
$NGINX_BIN -t >/dev/null 2>&1
if [ $? -eq 0 ]; then
systemctl restart nginx 2>/dev/null || $NGINX_BIN -s reload
sleep 2
if check_process; then
log "Nginx重启成功"
return 0
else
log "Nginx重启失败"
return 1
fi
else
log "Nginx配置文件有误"
return 1
fi
}
# 主监控逻辑
main() {
log "开始Nginx服务检查"
# 检查进程
if check_process; then
log "Nginx进程运行正常"
else
log "Nginx进程未运行"
send_alert "Nginx进程未运行,正在尝试重启"
restart_nginx
exit 1
fi
# 检查HTTP响应
if check_http; then
log "Nginx HTTP响应正常"
else
log "Nginx HTTP响应异常"
send_alert "Nginx HTTP响应异常"
# 尝试重启
restart_nginx
if [ $? -eq 0 ]; then
log "重启后自动恢复"
else
send_alert "Nginx重启失败,需要人工干预"
fi
fi
}
# 执行主程序
main
使用systemd状态检查(CentOS 7+)
#!/bin/bash
# 检查nginx服务状态
SERVICE_STATUS=$(systemctl is-active nginx)
case $SERVICE_STATUS in
active)
echo "Nginx 服务状态: 运行中"
;;
inactive)
echo "Nginx 服务状态: 已停止"
# 尝试启动
systemctl start nginx
if [ $? -eq 0 ]; then
echo "Nginx 服务已启动"
else
echo "Nginx 启动失败"
fi
;;
failed)
echo "Nginx 服务状态: 故障"
systemctl restart nginx
;;
esac
定时监控脚本(crontab配置)
# 编辑crontab crontab -e # 添加以下行,每5分钟执行一次监控 */5 * * * * /usr/local/bin/nginx_monitor.sh # 每小时的第一次执行,并记录日志 0 * * * * /usr/local/bin/nginx_monitor.sh >> /var/log/nginx_cron.log 2>&1
资源使用监控
#!/bin/bash
# 监控nginx资源使用
MONITOR_LOG="/var/log/nginx_resource.log"
# CPU和内存使用率
CPU_USAGE=$(ps aux | grep nginx | grep -v grep | awk '{sum+=$3} END {print sum}')
MEM_USAGE=$(ps aux | grep nginx | grep -v grep | awk '{sum+=$4} END {print sum}')
CONNECTIONS=$(ss -tan | grep :80 | wc -l)
# 写入日志
echo "$(date '+%Y-%m-%d %H:%M:%S') CPU:${CPU_USAGE}% MEM:${MEM_USAGE}% CONN:${CONNECTIONS}" >> $MONITOR_LOG
# 异常告警
if [ $(echo "$CPU_USAGE > 80" | bc) -eq 1 ]; then
echo "告警: Nginx CPU使用率超过80%"
fi
if [ $(echo "$MEM_USAGE > 80" | bc) -eq 1 ]; then
echo "告警: Nginx 内存使用率超过80%"
fi
邮件告警配置
#!/bin/bash
# 安装mailx用于发送邮件
# CentOS: yum install mailx -y
# Ubuntu: apt-get install mailutils -y
# 配置邮件发送
send_mail() {
local subject="$1"
local body="$2"
# 方式1:使用mail命令
echo "$body" | mail -s "$subject" admin@example.com
# 方式2:使用sendmail
# echo -e "Subject: $subject\n\n$body" | sendmail -t admin@example.com
# 方式3:使用curl发送企业微信/钉钉通知
# curl -X POST https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY \
# -H 'Content-Type: application/json' \
# -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$subject: $body\"}}"
}
使用说明
-
设置执行权限:
chmod +x /path/to/nginx_monitor.sh
-
添加到系统服务(可选):
# 创建系统服务 cat > /etc/systemd/system/nginx-monitor.service << EOF [Unit] Description=Nginx Monitor Service After=network.target
[Service] Type=simple ExecStart=/path/to/nginx_monitor.sh Restart=always
[Install] WantedBy=multi-user.target EOF
启用服务
systemctl enable nginx-monitor systemctl start nginx-monitor
3. **测试脚本**:
```bash
# 手动测试
bash /path/to/nginx_monitor.sh
# 查看日志
cat /var/log/nginx_monitor.log
最佳实践建议
- 监控频率:生产环境建议1-5分钟检查一次
- 多维度监控:结合进程、端口、HTTP响应多方面检查
- 告警分级:设置不同级别的告警(警告、严重、紧急)
- 自动恢复:配置自动重启机制
- 日志管理:定期清理和归档监控日志
- 负载均衡:如果使用负载均衡,监控所有节点
选择适合你环境的监控方案,建议从简单开始,逐步完善监控策略。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播