在Linux系统中,监控进程是确保系统稳定运行的关键环节,通过编写自动化脚本,可以实时跟踪进程状态、资源占用及异常情况,及时发现问题并采取应对措施,以下将详细介绍Linux监控进程脚本的编写方法、核心功能及实现技巧。

监控脚本的核心功能设计
一个完善的进程监控脚本应具备以下基础功能:需支持指定进程名称或进程ID(PID)作为监控目标,满足不同场景需求;能够实时采集进程的CPU占用率、内存使用量、运行状态等关键指标;应设置阈值告警机制,当资源占用超过预设值时触发通知;需记录历史监控数据,便于后续分析排查问题。
基础监控脚本的实现
以Bash脚本为例,可通过ps命令结合grep筛选目标进程,再利用awk提取关键信息,以下为简单示例代码:
#!/bin/bash
PROCESS_NAME="nginx" # 监控的进程名
CPU_THRESHOLD=80 # CPU告警阈值(%)
MEM_THRESHOLD=80 # 内存告警阈值(%)
# 获取进程信息
pid=$(pgrep -d, "$PROCESS_NAME")
if [ -z "$pid" ]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 警告:进程 $PROCESS_NAME 未运行" >> /var/log/process_monitor.log
exit 1
fi
# 采集资源占用数据
cpu_usage=$(ps -p "$pid" -o %cpu --no-headers | awk '{printf "%.1f", $1}')
mem_usage=$(ps -p "$pid" -o %mem --no-headers | awk '{printf "%.1f", $1}')
# 判断是否超阈值
if (( $(echo "$cpu_usage > $CPU_THRESHOLD" | bc -l) )); then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 警告:进程 $PROCESS_NAME CPU占用率 ${cpu_usage}% 超过阈值" >> /var/log/process_monitor.log
fi
if (( $(echo "$mem_usage > $MEM_THRESHOLD" | bc -l) )); then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 警告:进程 $PROCESS_NAME 内存占用率 ${mem_usage}% 超过阈值" >> /var/log/process_monitor.log
fi
脚本通过pgrep精确定位进程ID,避免grep自身进程干扰,再使用ps命令的%cpu和%mem选项获取资源占用百分比,最后通过bc进行浮点数比较实现阈值判断。

高级功能扩展
多进程监控与异常处理
当需要监控多个进程时,可将进程名配置为数组或文件列表,并通过循环遍历处理,同时增加进程存活检测,若进程意外退出可自动触发重启或告警。
for process in "${PROCESS_LIST[@]}"; do
if ! pgrep -x "$process" > /dev/null; then
echo "[$(date)] 进程 $process 异常退出,尝试重启..." >> /var/log/process_monitor.log
# systemctl restart "$process" # 或其他重启命令
fi
done
数据持久化与可视化
为便于长期分析,可将监控数据写入数据库或CSV文件,结合rrdtool或Grafana可实现数据可视化,生成资源占用趋势图,例如每日生成统计报告:
echo "$(date), $PROCESS_NAME, $cpu_usage, $mem_usage" >> /var/log/process_stats.csv
邮件/短信告警集成
通过配置mailx或调用API接口,实现告警信息的实时推送,以下为邮件告警示例:

if [ "$cpu_usage" -gt "$CPU_THRESHOLD" ]; then
echo "进程 $PROCESS_NAME CPU占用异常,当前值:${cpu_usage}%" | mail -s "进程监控告警" admin@example.com
fi
脚本优化与部署建议
- 执行效率优化:避免频繁调用外部命令,可改用
/proc文件系统直接读取进程数据,如/proc/$pid/stat。 - 日志管理:使用
logrotate工具管理日志文件,避免单日志文件过大。 - 定时任务:通过
crontab设置定时执行,例如每分钟检查一次:*/1 * * * * /usr/local/bin/process_monitor.sh
- 参数化设计:将进程名、阈值等配置项定义为脚本变量,或通过配置文件管理,提升脚本灵活性。
Linux进程监控脚本的编写需结合实际需求,从基础功能逐步扩展到高级特性,通过合理设计阈值告警、数据记录和自动化处理机制,可有效提升系统运维效率,在实际部署中,应充分测试脚本在不同场景下的稳定性,并定期优化代码逻辑,确保监控系统的可靠性和可维护性。


















