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

第三周作业一:编写一个Bash脚本,能够监控指定名称的进程(例如 nginx 或 sshd)。 如果进程存在,则输出其PID和状态信息 如果进程不存在,则自动尝试重启该进程(可假设进程

#!/bin/bash

# ==================== 配置项(可修改)====================
PROCESS_NAME="sshd" # 要监控的进程名
START_CMD="/usr/sbin/sshd" # 进程启动命令
CHECK_INTERVAL=5 # 检查间隔(秒)
LOG_FILE="/var/log/process_monitor.log" # 日志路径
# ========================================================

# 函数:输出带时间戳的日志
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

# 函数:检查进程是否存在
check_process() {
# 使用 pgrep 查找进程,-x 精确匹配名称
PID=$(pgrep -x "$PROCESS_NAME")

if [ -n "$PID" ]; then
# 进程存在
echo "✅ 进程 $PROCESS_NAME 正在运行,PID: $PID"
# 输出详细状态
ps aux | grep -v grep | grep "$PROCESS_NAME"
return 0
else
# 进程不存在
echo "❌ 进程 $PROCESS_NAME 未运行"
return 1
fi
}

# 主循环:每隔5秒检查一次
echo "==================== 启动进程监控 $PROCESS_NAME ===================="
log "监控服务已启动,检查间隔:${CHECK_INTERVAL}秒"

while true; do
# 条件判断:调用函数检查进程
if check_process; then
: # 空命令,进程正常不做操作
else
echo "🔧 尝试自动重启 $PROCESS_NAME..."
log "进程异常,执行重启命令:$START_CMD"

# 后台启动进程
$START_CMD &

# 等待1秒再次检查
sleep 1
if pgrep -x "$PROCESS_NAME" > /dev/null; then
echo "✅ 重启成功!"
log "进程重启成功"
else
echo "❌ 重启失败!"
log "进程重启失败"
fi
fi

echo "------------------------------------------------"
# 循环间隔
sleep $CHECK_INTERVAL
done


chmod +x process_monitor.sh

vim /etc/systemd/system/process-monitor.service

[Unit]
Description=Process Monitor Service
After=network.target

[Service]
ExecStart=/root/process_monitor.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable process-monitor
systemctl start process-monitor

systemctl status process-monitor

http://www.cnnetsun.cn/news/1988155.html

相关文章:

  • AI开发-python-langchain框架(--提取pdf中的图片 )
  • Pixel Fashion Atelier部署教程:Mac M2/M3芯片通过MLX适配Stable Diffusion方案
  • PVE集群“离婚”指南:安全移除节点(pvecm delnode)与故障恢复全记录
  • 图论——BFS搜索模板(python)
  • 保姆级教程:用Python脚本搞定CelebAMask-HQ数据集预处理与可视化(附完整代码)
  • 告别枯燥理论:手把手教你用TPC-ZK实验箱玩转DAC0832,生成可调方波与正弦波
  • AGI能自己证明“自己不会出错”吗?——2026奇点大会首席科学家闭门演讲实录(含47分钟未删减技术推演)
  • tinyalsa(0)
  • 保姆级教程:在STM32上配置FreeRTOS+TraceRecorder,让你的RTOS调试可视化
  • 穿越机电调协议进化史:从PWM到DShot1200的性能对比实测
  • 避坑指南:排查PCIe设备不识别?先弄明白RC、PCH和DMI这‘三兄弟’
  • CFPS数据怎么用?手把手教你申请下载北大开放研究数据平台上的微观调查数据
  • Vue3环境变量实战:从配置到智能提示的完整指南
  • 01华夏之光永存:黄大年茶思屋榜文解法「难题揭榜第9期 第1题」异构网络QoS保障下带宽四倍提升与高效传输协议工程化解法
  • OpenClaw 看着风光,其实处境尴尬:Hermes 正在成为一个巨大的挑战
  • 【仅限首批200名开发者开放】AGI情感交互沙盒环境正式解封:含7类真实社交冲突场景数据集与动态共情评分API
  • 从GitHub高星C++内存池项目中提炼的三种设计哲学与选型指南
  • 用STM32CubeMX和HAL库快速搞定BMP280气压传感器(附完整代码)
  • 别再只调亮度了!用STM32的PWM和外部中断,给你的台灯加上“防近视”和“小夜灯”模式
  • 别再死记硬背欧氏和曼哈顿距离了!用Python实战理解闵可夫斯基距离的万能公式
  • COMSOL声学建模进阶:从散射场分析到声子晶体能带计算
  • 从数据视角到决策边界:PCA与LDA在机器学习中的角色定位
  • Windows10下ESP32开发环境避坑指南:手把手解决esp-idf-tools-setup离线安装的‘长路径’报错
  • 跨越鸿沟:从理论到实践,解析技术采纳的生死线
  • Spring Boot 2.x + MyBatis 连接 Doris 数据库保姆级教程(附完整项目源码)
  • AdSense新手必看:W-8BEN表格保姆级填写指南,避开那些让你审核卡壳的坑
  • 代码复现: 《含多微网租赁共享储能的配电网博弈优化调度》 首先利用NSGA-II算法求解三个微...
  • 浏览器文档下载工具的技术原理与实战指南:如何高效获取30+平台文档
  • 从9013到S8050:新手选型避坑指南,搞懂三极管型号里的字母数字到底啥意思
  • SVGSON:企业级SVG-JSON双向转换解决方案助力生产就绪的图形数据处理