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

系统运维脚本:定时采集、定时备份、远程重启、磁盘空间监控

系统运维脚本:定时采集、定时备份、远程重启、磁盘空间监控

工控设备部署在野外,你不可能天天往现场跑——运维自动化不是选择题,是必答题。

一、工控运维为什么必须自动化

工业控制设备的典型运行环境:工厂车间、户外机柜、偏远站点,7×24小时不间断运行。现场没人懂技术,出了问题只能远程排查或者派人去。如果每次数据采集、备份、磁盘清理都靠人工,那维护成本会随设备数量线性增长。

自动化运维脚本的核心目标:让设备自己照顾自己,人只管看报警和处理异常。

二、crontab定时任务配置

Linux下的定时任务调度器,每个用户一份crontab,格式固定。

2.1 crontab格式

# ┌──────── 分钟 (0-59) # │ ┌────── 小时 (0-23) # │ │ ┌──── 日 (1-31) # │ │ │ ┌── 月 (1-12) # │ │ │ │ ┌ 周 (0-7, 0和7都是周日) # │ │ │ │ │ * * * * * command

2.2 特殊符号

符号含义示例
*任意值* * * * *每分钟
,列表0,15,30,45 * * * *每15分钟
-范围0 9-18 * * 1-5工作日9-18点
/步长*/5 * * * *每5分钟

2.3 常用操作

# 编辑当前用户的crontabcrontab-e# 查看当前用户的crontabcrontab-l# 系统级定时任务(直接编辑文件)vim/etc/crontab# /etc/crontab 比crontab -e多一个用户字段:# m h dom mon dow user command

三、实战脚本1:定时数据采集

场景:每隔5分钟从串口读取传感器数据,存入CSV文件。

#!/bin/bash# /opt/scripts/serial_collect.sh# 串口数据采集脚本SERIAL_DEV="/dev/ttyS1"BAUDRATE="9600"DATA_DIR="/data/serial"DATE=$(date+%Y%m%d)CSV_FILE="${DATA_DIR}/sensor_${DATE}.csv"mkdir-p"$DATA_DIR"# 使用stty设置串口参数stty-F"$SERIAL_DEV""$BAUDRATE"cs8-cstopb-parenb-ixon-ixoff# 读取串口数据(3秒超时,读取一行)RAW_DATA=$(timeout3cat"$SERIAL_DEV"|head-n1)if[-z"$RAW_DATA"];thenecho"$(date'+%Y-%m-%d %H:%M:%S')[WARN] No data from serial">>"$DATA_DIR/collect.log"exit1fi# 写入CSV(首行表头自动创建)if[!-f"$CSV_FILE"];thenecho"timestamp,raw_data">"$CSV_FILE"fiecho"$(date'+%Y-%m-%d %H:%M:%S'),${RAW_DATA}">>"$CSV_FILE"echo"$(date'+%Y-%m-%d %H:%M:%S')[INFO] Data saved:${RAW_DATA}">>"$DATA_DIR/collect.log"

crontab配置:

# 每5分钟采集一次*/5 * * * * /opt/scripts/serial_collect.sh

四、实战脚本2:定时备份

场景:每天凌晨2点打包关键数据,保留最近7天备份。

#!/bin/bash# /opt/scripts/auto_backup.sh# 定时备份脚本BACKUP_SRC="/data/config /data/serial /opt/app"BACKUP_DST="/backup"KEEP_DAYS=7DATE=$(date+%Y%m%d_%H%M%S)BACKUP_FILE="${BACKUP_DST}/backup_${DATE}.tar.gz"LOG_FILE="${BACKUP_DST}/backup.log"mkdir-p"$BACKUP_DST"echo"$(date'+%Y-%m-%d %H:%M:%S')[INFO] Start backup...">>"$LOG_FILE"# 打包压缩tar-czf"$BACKUP_FILE"$BACKUP_SRC2>>"$LOG_FILE"if[$?-eq0];thenFILESIZE=$(du-h"$BACKUP_FILE"|awk'{print $1}')echo"$(date'+%Y-%m-%d %H:%M:%S')[OK] Backup done:${BACKUP_FILE}(${FILESIZE})">>"$LOG_FILE"elseecho"$(date'+%Y-%m-%d %H:%M:%S')[ERROR] Backup failed!">>"$LOG_FILE"exit1fi# 清理过期备份find"$BACKUP_DST"-name"backup_*.tar.gz"-mtime+${KEEP_DAYS}-deleteecho"$(date'+%Y-%m-%d %H:%M:%S')[INFO] Old backups (>${KEEP_DAYS}d) cleaned">>"$LOG_FILE"# 列出当前备份echo"--- Current backups ---">>"$LOG_FILE"ls-lh"$BACKUP_DST"/backup_*.tar.gz>>"$LOG_FILE"2>&1

crontab配置:

# 每天凌晨2:00执行备份02* * * /opt/scripts/auto_backup.sh

五、实战脚本3:远程重启

场景:远程通过SSH重启目标设备,重启后等待设备恢复并验证连通性。

#!/bin/bash# /opt/scripts/remote_reboot.sh# 远程重启脚本TARGET_IP="192.168.1.100"SSH_USER="root"SSH_PORT=22SSH_KEY="/root/.ssh/id_rsa"MAX_WAIT=120# 最大等待秒数CHECK_INTERVAL=5echo"$(date)[INFO] Rebooting${TARGET_IP}..."# 远程执行rebootssh-i"$SSH_KEY"-p"$SSH_PORT"-oConnectTimeout=10\-oStrictHostKeyChecking=no\"${SSH_USER}@${TARGET_IP}""sync; reboot"2>/dev/nullif[$?-ne0]&&[$?-ne255];thenecho"$(date)[ERROR] SSH command failed"exit1fiecho"$(date)[INFO] Reboot command sent, waiting for device to come back..."# 等待设备下线sleep10# 轮询检测设备恢复WAIT=0while[$WAIT-lt$MAX_WAIT];doifping-c1-W2"$TARGET_IP">/dev/null2>&1;then# 再等几秒让SSH服务起来sleep5ifssh-i"$SSH_KEY"-p"$SSH_PORT"-oConnectTimeout=5\-oStrictHostKeyChecking=no\"${SSH_USER}@${TARGET_IP}""echo ok"2>/dev/null|grep-q"ok";thenecho"$(date)[OK] Device${TARGET_IP}is back online!"# 获取设备uptime确认确实重启过ssh-i"$SSH_KEY"-p"$SSH_PORT"\"${SSH_USER}@${TARGET_IP}""uptime"2>/dev/nullexit0fifiWAIT=$((WAIT+CHECK_INTERVAL))sleep$CHECK_INTERVALecho"$(date)[INFO] Waiting... (${WAIT}s elapsed)"doneecho"$(date)[ERROR] Device${TARGET_IP}did not come back within${MAX_WAIT}s!"exit1

六、实战脚本4:磁盘空间监控

场景:监控磁盘使用率,超过80%报警,超过90%自动清理旧日志。

#!/bin/bash# /opt/scripts/disk_monitor.sh# 磁盘空间监控脚本WARN_THRESHOLD=80# 报警阈值(%)CLEAN_THRESHOLD=90# 自动清理阈值(%)CLEAN_DIR="/var/log"# 待清理目录LOG_FILE="/var/log/disk_monitor.log"# 获取根分区使用率USAGE=$(df-h/|awk'NR==2 {print $5}'|tr-d'%')echo"$(date'+%Y-%m-%d %H:%M:%S')[INFO] Disk usage:${USAGE}%">>"$LOG_FILE"if["$USAGE"-ge"$CLEAN_THRESHOLD"];thenecho"$(date'+%Y-%m-%d %H:%M:%S')[WARN] Disk usage${USAGE}% >=${CLEAN_THRESHOLD}%, auto cleaning...">>"$LOG_FILE"# 清理7天前的日志文件find"$CLEAN_DIR"-name"*.log"-mtime+7-delete2>/dev/nullfind"$CLEAN_DIR"-name"*.log.*"-mtime+3-delete2>/dev/null# 清理压缩的旧日志find"$CLEAN_DIR"-name"*.gz"-mtime+3-delete2>/dev/null# 截断大日志文件(保留最后1000行)find"$CLEAN_DIR"-name"*.log"-size+50M-execsh-c\'tail -n 1000 "$1" > "$1.tmp" && mv "$1.tmp" "$1"'_{}\;# 清理后重新检测USAGE_AFTER=$(df-h/|awk'NR==2 {print $5}'|tr-d'%')echo"$(date'+%Y-%m-%d %H:%M:%S')[INFO] After cleanup:${USAGE_AFTER}%">>"$LOG_FILE"if["$USAGE_AFTER"-ge"$CLEAN_THRESHOLD"];then# 清理后仍然超标,发送报警echo"$(date'+%Y-%m-%d %H:%M:%S')[CRITICAL] Disk still full after cleanup:${USAGE_AFTER}%">>"$LOG_FILE"# 调用报警(见下一节)/opt/scripts/send_alert.sh"CRITICAL""Disk usage${USAGE_AFTER}% on$(hostname)"fielif["$USAGE"-ge"$WARN_THRESHOLD"];thenecho"$(date'+%Y-%m-%d %H:%M:%S')[WARN] Disk usage${USAGE}% >=${WARN_THRESHOLD}%!">>"$LOG_FILE"/opt/scripts/send_alert.sh"WARNING""Disk usage${USAGE}% on$(hostname)"fi

crontab配置:

# 每小时检查一次磁盘0* * * * /opt/scripts/disk_monitor.sh

七、报警集成

7.1 邮件报警

#!/bin/bash# /opt/scripts/send_alert.sh# 报警发送脚本(邮件 + HTTP回调)LEVEL=$1MESSAGE=$2MAIL_TO="admin@example.com"WEBHOOK_URL="https://your-api.example.com/alert"TIMESTAMP=$(date'+%Y-%m-%d %H:%M:%S')HOSTNAME=$(hostname)# 方式1:mail命令发邮件echo"[${LEVEL}]${TIMESTAMP}${HOSTNAME}:${MESSAGE}"|\mail-s"[${LEVEL}] Alert from${HOSTNAME}""$MAIL_TO"2>/dev/null# 方式2:curl调用Webhook(钉钉/企业微信/飞书等)curl-s-XPOST"$WEBHOOK_URL"\-H"Content-Type: application/json"\-d"{\"level\":\"${LEVEL}\",\"host\":\"${HOSTNAME}\",\"message\":\"${MESSAGE}\",\"timestamp\":\"${TIMESTAMP}\"}">/dev/null2>&1echo"$(date'+%Y-%m-%d %H:%M:%S')[INFO] Alert sent: [${LEVEL}]${MESSAGE}">>/var/log/alert.log

7.2 钉钉机器人报警示例

# 钉钉自定义机器人WebhookDINGTALK_URL="https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"curl-s"$DINGTALK_URL"\-H"Content-Type: application/json"\-d'{ "msgtype": "text", "text": { "content": "['"${LEVEL}"'] '"${HOSTNAME}"': '"${MESSAGE}"'"}}'

八、日志轮转

除了脚本手动清理,Linux自带的logrotate是更规范的日志管理工具:

# /etc/logrotate.d/myapp/var/log/myapp/*.log{daily rotate7compress delaycompress missingok notifempty copytruncate size 50M}

配置说明:每天轮转,保留7份,压缩旧日志,文件超过50M也轮转,copytruncate在不重启服务的情况下截断当前日志。

九、工控运维脚本部署清单

序号脚本功能定时周期优先级
1serial_collect.sh串口数据采集5分钟
2auto_backup.sh数据备份每天2:00
3disk_monitor.sh磁盘空间监控每小时
4remote_reboot.sh远程重启手动触发
5send_alert.sh报警通知被调用
6logrotate日志轮转每天
7ntp_sync.shNTP时间同步每小时

部署步骤:

# 1. 创建脚本目录mkdir-p/opt/scripts# 2. 上传所有脚本cp*.sh /opt/scripts/chmod+x /opt/scripts/*.sh# 3. 配置crontabcrontab-e# 粘贴所有定时任务# 4. 验证脚本权限和依赖/opt/scripts/auto_backup.sh --dry-run# 5. 检查crontab服务systemctl status crond systemctlenablecrond

运维脚本不追求花哨,追求可靠、可追溯、可报警。每条定时任务执行结果都要写日志,出问题能查到,这才是工控运维的基本功。

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

相关文章:

  • 2026年广州配眼镜推荐,按场景怎么选?六个用镜画面帮你对号入座 - 配眼镜新资讯
  • 2026年广元评价高的绳索护栏批发选购实用指南 - 品牌优推
  • 如何快速掌握鸣潮工具箱:5步解锁游戏120FPS高帧率体验
  • 2026年泡沫混凝土基坑回填生产厂家有哪些靠谱选择 - 品牌优推
  • 2026年昆明配眼镜推荐,按需求分类整理:不同人群该怎么选对应的镜片 - 配眼镜新资讯
  • 推理服务自动扩缩容:从“压测发现不够才加“到 GPU 利用率驱动的弹性伸缩复盘
  • 2026年7月发布阿里斯顿壁挂炉售后服务电话人工客服全新专属热线升级公示最新公告 - 家电技术百科
  • 鼓楼区热水系统清洗除垢公司本地专业服务选择指南 - 品牌优推
  • 滨州本地防水补漏精选TOP5推荐:正规漏水检测维修公司上门师傅推荐:厕所/棚顶/屋面/飘窗/阳台/地下室/厨房渗漏水精准测漏维修(2026最新) - 即刻修防水
  • 2026 年现阶段,景德镇专业的热浸锌桥架定制厂家选哪家,用这玩意儿,你的电线会不会瞬间被锈穿?-奥拓斯桥架 - 行业推荐【认证官】
  • 2026年济南白酒加盟品牌哪家靠谱 选型参考汇总 - 起跑123
  • HarmonyOS开发实战:小分享-Navigation 导航容器——替代 router 实现现代路由
  • 高性价比的开放式耳机有哪些?十大公认高性价比的开放式耳机推荐
  • 战略咨询行业新标尺:聚焦企业实际经营成效的专业服务
  • 【消息中间件AI化转型白皮书】:从零搭建企业级AI-Codegen平台,支持12种协议适配+人工审核沙箱+合规审计日志(限免申请通道开启)
  • 2026年沈阳高速复印机租赁公司哪家靠谱实用选型指南 - 品牌优推
  • 深入解析USB Type-C PD物理层与TPS65981电源管理芯片设计
  • 开放式耳机性价比高有哪些?2026年十大高性价比开放式耳机推荐
  • 2026创业资源丰富的国内EMBA中立测评
  • 2026年郑州市场充电桩运营托管服务商综合评估与可靠品牌推荐 - 装修教育财税推荐2026
  • 松江区加厚防滑路基箱厂家本地选型实用指南 - 品牌优推
  • 2026年原汁原味火锅店推荐 品草原羔羊自带的清鲜本味 - 品牌优推
  • PCL2启动器终极指南:5大核心功能彻底解决你的Minecraft管理难题
  • Nintendo Switch游戏安装终极指南:Awoo Installer的3种高效安装方法
  • 边缘端商品识别系统构建实战:基于YOLO系列的货架缺货检测方案从训练到部署完整记录
  • 阳江零库存尼龙辅料配套公司采购要点及服务全指南 - 品牌优推
  • 查询液压摇臂钻床生产厂家电话 正规设备采购对接指引 - 品牌优推
  • 2026挑选标识定制服务商时可参考宁波正规厂家 - 起跑123
  • 2026年高品质SHEIN同款防水拉链厂家哪家靠谱 - 热点品牌推荐
  • 提示词降重改写终极清单:17种场景适配策略,含教育/医疗/法律垂直领域专用词库(限时开放)