当前位置: 首页 > news >正文

Nginx进程监控脚本编写、周期任务、内核管理、网络管理

Nginx进程监控脚本编写、周期任务、内核管理、网络管理

一、Nginx进程监控脚本编写

1、脚本源码如下

#!/bin/bash
# =============================================================================
# Nginx进程监控脚本
# 作者:杨叠文
# =============================================================================# 定义变量
NGINX_BIN="/usr/sbin/nginx"
NGINX_CONF="/etc/nginx/nginx.conf"
LOG_FILE="/var/log/nginx_monitor.log"
CHECK_INTERVAL=5
MAX_RESTART=5# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'# 写日志
log(){local level="$1"local message="$2"local timestamptimestamp=$(date '+%Y-%m-%d %H:%M:%S')echo "[$timestamp] [$level] $message" | tee -a "$LOG_FILE"
}# 获取 PID
get_nginx_pid(){local pid=""if [ -f /run/nginx.pid ]; thenpid=$(cat /run/nginx.pid 2>/dev/null)elif [ -f /var/run/nginx.pid ]; thenpid=$(cat /var/run/nginx.pid 2>/dev/null)fiif [ -z "$pid" ]; thenpid=$(pgrep -x nginx | head -1)fiecho "$pid"
}# 检测进程是否存活
check_process_alive(){local pid="$1"if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; thenreturn 0elsereturn 1fi
}# 展示Nginx进程信息
show_process_info(){local pid="$1"echo -e "${GREEN}[OK] Nginx 正在运行,主进程 PID=$pid${NC}"ps aux | grep nginx | grep -v grepif [ -f "/proc/$pid/status" ]; thenecho ">>> /proc/$pid/status 摘要:"grep -E "^(Name|State|Pid|PPid|Threads|VmRSS)" "/proc/$pid/status"fi
}# 重启 Nginx
restart_nginx(){log "WARN" "Nginx 未运行,尝试重启..."pkill -x nginx 2>/dev/nullsleep 1"$NGINX_BIN" -c "$NGINX_CONF" &   # ← 修复变量引用local bg_pid=$!sleep 2local new_pidnew_pid=$(get_nginx_pid)if check_process_alive "$new_pid"; thenlog "INFO" "Nginx 重启成功,新 PID=$new_pid(后台 PID=$bg_pid)"return 0elselog "ERROR" "Nginx 重启失败!请检查配置文件或端口占用"return 1fi
}# 主循环
main(){log "INFO" "======= Nginx 监控脚本启动 ======="local restart_count=0while true; dolocal pidpid=$(get_nginx_pid)if check_process_alive "$pid"; thenshow_process_info "$pid"log "INFO" "Nginx 运行正常,PID=$pid"restart_count=0elseecho -e "${RED}[WARN] Nginx 进程不存在!${NC}"log "WARN" "Nginx 进程不存在!重启次数: $restart_count"if [ "$restart_count" -lt "$MAX_RESTART" ]; thenrestart_nginxrestart_count=$((restart_count + 1))elselog "ERROR" "已达最大重启次数,请人工介入!"exit 1fifisleep "$CHECK_INTERVAL"done
}main

2、执行示意图如下

image

 3、设置开机自启动

(1)把脚本移到系统目录

image

 (2)创建 systemd service 文件

image

 (3)注册并启动

image

 (4)验证

查看服务状态

image

 查看服务实时日志

image

 查看自启动是否配置成功,返回enabled表示成功

image

 

二、周期任务

设计一个周期性任务:
每周日凌晨3点自动清理 /tmp 目录下超过7天的临时文件
每天中午12点记录当前系统进程数、内存使用量到 /var/log/system_health.log
使用 crontab 配置上述任务,并解释 cron 的时间语法、环境变量问题及日志查看方法

步骤如下:

用crontab -e添加任务:每周日凌晨3点清理 /tmp 下超过7天的文件

image

 编写记录系统进程数和内存使用量脚本,并执行

image

 执行脚本并查看日志

image

 再追加一条每天中午12点记录系统健康状态的任务

image

 crontab时间解析

image

 

三、内核管理实践

完成一个内核管理实践:
通过 sysctl 临时和永久修改一个内核参数(例如 vm.swappiness=10 或 net.ipv4.tcp_syncookies=1)
使用 cat /proc/sys/net/ipv4/ip_forward 等方式查看当前值,并解释 /proc 文件系统的虚拟文件特性

解释:/proc 是内核暴露给用户空间的API 接口,只不过伪装成了文件系统。使用cat查看一个文件就是在调一个只读 API,echo 写入一个文件就是在调一个写 API

步骤如下:

查看临时修改前的值

net.ipv4.ip_forward = 0:IPv4 数据包转发功能开关(0表示关闭)
net.ipv4.tcp_syncookies = 1:TCP SYN Cookies 防护开关(1表示开启状态)
vm.swappiness = 60:系统使用交换分区(swap)的倾向值(60表示默认值)

image

 临时修改

image

 永久修改

image

 立即生效

image

 

四、网络管理总结

1、OSI 七层 与 TCP/IP 四层对比图

image

 2、IP地址分类

IPV4

image

私有地址范围
A类: 10.0.0.0/8 (10.0.0.0 ~ 10.255.255.255)
B类: 172.16.0.0/12 (172.16.0.0 ~ 172.31.255.255)
C类: 192.168.0.0/16 (192.168.0.0 ~ 192.168.255.255)

 

IPV6特性:

(1)128位地址(IPv4 是32位),地址空间极大
(2)冒号十六进制表示:2001:0db8:85a3::8a2e:0370:7334
(3)无类地址:没有A/B/C类划分,统一使用 CIDR
(4)内置安全性:IPsec 集成
(5)无广播:使用组播代替

 

3、TCP/IP协议

(1)TCP/IP 四层协议栈

从上到下顺序:应用层 → 传输层 → 网络层 → 网络接口层

应用层:负责业务数据,协议有:HTTP、HTTPS、FTP、SSH、DNS、SMTP

传输层:负责端到端通信、可靠传输、端口;核心协议:TCP:面向连接、可靠、有确认、重传、握手挥手、UDP:无连接、不可靠、速度快、不用握手

网络层:负责寻址、路由选路、跨网段转发;核心协议:IP、ICMP、ARP

网络接口层(链路层 + 物理层):负责帧封装、MAC 寻址、物理传输;协议:以太网、PPP 等

 

(2)核心特点

面向连接:通信前必须建立连接
可靠传输:丢包重传、确认应答、有序
基于端口区分应用
断开需要四次挥手

 

(3)三次握手过程

目标:双方都确认 自己收发能力正常、对方收发能力正常

角色:客户端 C —— 服务端 S

第一次握手:C → S
客户端发 SYN 报文(作用:用来建立连接)
服务端收到:知道客户端能发


第二次握手:S → C
服务端回复 SYN + ACK
客户端收到:知道服务端能收、能发


第三次握手:C → S
客户端发 ACK(表示收到报文了,ACK=1)
意思:我收到你的确认了,连接正式建立
服务端收到:知道客户端能收
三次握手结束 → 可以正常传数据

 

(4)四次挥手过程

第一次挥手:客户端 C → 服务端 S
发 FIN(表示请求断开连接):我没数据要发了,我要关闭发送通道


第二次挥手:服务端 S → 客户端 C
回 ACK:收到你要关闭的请求,我知道了

此时:客户端 C不能发,但还能收数据(半关闭)


第三次挥手:服务端 S → 客户端 C
服务端 S也发 FIN:我也没数据了,我也要关


第四次挥手:客户端 C → 服务端 S
回 ACK:收到,确认关闭

 

4、常见的协议端口

image

 

5、HTTP和HTTPS

image

 HTTP的请求方法:

(1)GET:获取资源
(2)POST:提交数据
(3)PUT:更新资源
(4)DELETE:删除资源
(5)HEAD:获取响应头(不返回body)
(6)OPTIONS:查询支持的方法
(7)PATCH:部分更新

 

6、常用的网络命令

 (1)查看网络配置

ip addr show
ip route show

 

(2)查看连接状态

ss -tunlp
netstat -tunlp

 

(3)查看路由表

ip route
route -n

 

(3)查看 ARP 缓存

ip neigh
arp -a

 

http://www.jsqmd.com/news/740879/

相关文章:

  • OpenClaw 中文一键部署包:无需代码命令,一键安装即用
  • 解锁隐藏性能:NVIDIA Profile Inspector显卡优化完全指南
  • YOLO12保姆级教程:Gradio队列限流+并发控制防GPU OOM崩溃
  • Windows 11 24H2 LTSC 一键安装微软商店完整指南:3分钟恢复应用生态
  • SSIS闪退问题
  • 3分钟掌握百度网盘秒传:永久分享文件的终极指南
  • iOS激活锁终极免费解决方案:使用applera1n轻松解锁你的iPhone设备
  • 第6篇:数据容器——管理大量数据 Rust中文编程
  • 告别乱码和字段截断:用Python脚本批量修复SHP文件的编码和CPG文件
  • 39.ROUND / FLOOR / CEIL 函数深度解析
  • 站立式个人飞剑 - 每日详细制作步骤(第3周)
  • Pytorch图像去噪实战(二十三):高清大图分块去噪推理,解决显存爆炸和边缘接缝问题
  • 一次深夜告警复盘:我们是如何用pg_basebackup + 归档搞定PostgreSQL备库WAL丢失的
  • Graphify-DotNet:AI 驱动的 .NET 代码知识图谱构建工具
  • 终极指南:如何让魔兽争霸3在现代电脑上焕发新生
  • 千问 LeetCode 2009.使数组连续的最少操作数 Python3实现
  • [具身智能-538]:人类:硅基世界的 “建设者”,还是 “打工人”?
  • Windows 一键安装 OpenClaw 教程 零代码无命令部署
  • 链下数据索引工具sub-bridge:构建可靠链上事件监听与处理管道
  • 5分钟彻底美化你的VLC播放器:5款VeLoCity皮肤终极指南
  • 2. BundleSDF的虚拟环境搭建
  • 告别机械电位器!用STM32和MCP4017打造你的智能亮度调节模块(教程+源码)
  • 115proxy-for-kodi:在Kodi中实现115网盘视频流式播放的技术实现
  • 通过 curl 命令直接测试 Taotoken 聊天补全接口的完整步骤
  • 别再傻傻改元组了!Python新手必懂的3种‘不可变’数据替换技巧(附代码对比)
  • 告别虚拟机卡顿:实测2015款iMac用Rufus直装Win11双系统,驱动与5K分辨率完美设置指南
  • Java String 类深入解析
  • 如何快速成为斗地主高手:DouZero AI助手完整使用指南
  • 从零搭建GPU监控看板:用Python脚本+nvidia-smi定时抓取数据并可视化
  • 从色卡到代码:手把手教你用Python实现CIE 1931色度图转换(附完整代码)