系统运维脚本:定时采集、定时备份、远程重启、磁盘空间监控
系统运维脚本定时采集、定时备份、远程重启、磁盘空间监控工控设备部署在野外你不可能天天往现场跑——运维自动化不是选择题是必答题。一、工控运维为什么必须自动化工业控制设备的典型运行环境工厂车间、户外机柜、偏远站点7×24小时不间断运行。现场没人懂技术出了问题只能远程排查或者派人去。如果每次数据采集、备份、磁盘清理都靠人工那维护成本会随设备数量线性增长。自动化运维脚本的核心目标让设备自己照顾自己人只管看报警和处理异常。二、crontab定时任务配置Linux下的定时任务调度器每个用户一份crontab格式固定。2.1 crontab格式# ┌──────── 分钟 (0-59) # │ ┌────── 小时 (0-23) # │ │ ┌──── 日 (1-31) # │ │ │ ┌── 月 (1-12) # │ │ │ │ ┌ 周 (0-7, 0和7都是周日) # │ │ │ │ │ * * * * * command2.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/ttyS1BAUDRATE9600DATA_DIR/data/serialDATE$(date%Y%m%d)CSV_FILE${DATA_DIR}/sensor_${DATE}.csvmkdir-p$DATA_DIR# 使用stty设置串口参数stty-F$SERIAL_DEV$BAUDRATEcs8-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.logexit1fi# 写入CSV首行表头自动创建if[!-f$CSV_FILE];thenechotimestamp,raw_data$CSV_FILEfiecho$(date%Y-%m-%d %H:%M:%S),${RAW_DATA}$CSV_FILEecho$(date%Y-%m-%d %H:%M:%S)[INFO] Data saved:${RAW_DATA}$DATA_DIR/collect.logcrontab配置# 每5分钟采集一次*/5 * * * * /opt/scripts/serial_collect.sh四、实战脚本2定时备份场景每天凌晨2点打包关键数据保留最近7天备份。#!/bin/bash# /opt/scripts/auto_backup.sh# 定时备份脚本BACKUP_SRC/data/config /data/serial /opt/appBACKUP_DST/backupKEEP_DAYS7DATE$(date%Y%m%d_%H%M%S)BACKUP_FILE${BACKUP_DST}/backup_${DATE}.tar.gzLOG_FILE${BACKUP_DST}/backup.logmkdir-p$BACKUP_DSTecho$(date%Y-%m-%d %H:%M:%S)[INFO] Start backup...$LOG_FILE# 打包压缩tar-czf$BACKUP_FILE$BACKUP_SRC2$LOG_FILEif[$?-eq0];thenFILESIZE$(du-h$BACKUP_FILE|awk{print $1})echo$(date%Y-%m-%d %H:%M:%S)[OK] Backup done:${BACKUP_FILE}(${FILESIZE})$LOG_FILEelseecho$(date%Y-%m-%d %H:%M:%S)[ERROR] Backup failed!$LOG_FILEexit1fi# 清理过期备份find$BACKUP_DST-namebackup_*.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_FILEls-lh$BACKUP_DST/backup_*.tar.gz$LOG_FILE21crontab配置# 每天凌晨2:00执行备份02* * * /opt/scripts/auto_backup.sh五、实战脚本3远程重启场景远程通过SSH重启目标设备重启后等待设备恢复并验证连通性。#!/bin/bash# /opt/scripts/remote_reboot.sh# 远程重启脚本TARGET_IP192.168.1.100SSH_USERrootSSH_PORT22SSH_KEY/root/.ssh/id_rsaMAX_WAIT120# 最大等待秒数CHECK_INTERVAL5echo$(date)[INFO] Rebooting${TARGET_IP}...# 远程执行rebootssh-i$SSH_KEY-p$SSH_PORT-oConnectTimeout10\-oStrictHostKeyCheckingno\${SSH_USER}${TARGET_IP}sync; reboot2/dev/nullif[$?-ne0][$?-ne255];thenecho$(date)[ERROR] SSH command failedexit1fiecho$(date)[INFO] Reboot command sent, waiting for device to come back...# 等待设备下线sleep10# 轮询检测设备恢复WAIT0while[$WAIT-lt$MAX_WAIT];doifping-c1-W2$TARGET_IP/dev/null21;then# 再等几秒让SSH服务起来sleep5ifssh-i$SSH_KEY-p$SSH_PORT-oConnectTimeout5\-oStrictHostKeyCheckingno\${SSH_USER}${TARGET_IP}echo ok2/dev/null|grep-qok;thenecho$(date)[OK] Device${TARGET_IP}is back online!# 获取设备uptime确认确实重启过ssh-i$SSH_KEY-p$SSH_PORT\${SSH_USER}${TARGET_IP}uptime2/dev/nullexit0fifiWAIT$((WAITCHECK_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_THRESHOLD80# 报警阈值(%)CLEAN_THRESHOLD90# 自动清理阈值(%)CLEAN_DIR/var/log# 待清理目录LOG_FILE/var/log/disk_monitor.log# 获取根分区使用率USAGE$(df-h/|awkNR2 {print $5}|tr-d%)echo$(date%Y-%m-%d %H:%M:%S)[INFO] Disk usage:${USAGE}%$LOG_FILEif[$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-mtime7-delete2/dev/nullfind$CLEAN_DIR-name*.log.*-mtime3-delete2/dev/null# 清理压缩的旧日志find$CLEAN_DIR-name*.gz-mtime3-delete2/dev/null# 截断大日志文件保留最后1000行find$CLEAN_DIR-name*.log-size50M-execsh-c\tail -n 1000 $1 $1.tmp mv $1.tmp $1_{}\;# 清理后重新检测USAGE_AFTER$(df-h/|awkNR2 {print $5}|tr-d%)echo$(date%Y-%m-%d %H:%M:%S)[INFO] After cleanup:${USAGE_AFTER}%$LOG_FILEif[$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.shCRITICALDisk 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.shWARNINGDisk usage${USAGE}% on$(hostname)ficrontab配置# 每小时检查一次磁盘0* * * * /opt/scripts/disk_monitor.sh七、报警集成7.1 邮件报警#!/bin/bash# /opt/scripts/send_alert.sh# 报警发送脚本邮件 HTTP回调LEVEL$1MESSAGE$2MAIL_TOadminexample.comWEBHOOK_URLhttps://your-api.example.com/alertTIMESTAMP$(date%Y-%m-%d %H:%M:%S)HOSTNAME$(hostname)# 方式1mail命令发邮件echo[${LEVEL}]${TIMESTAMP}${HOSTNAME}:${MESSAGE}|\mail-s[${LEVEL}] Alert from${HOSTNAME}$MAIL_TO2/dev/null# 方式2curl调用Webhook钉钉/企业微信/飞书等curl-s-XPOST$WEBHOOK_URL\-HContent-Type: application/json\-d{\level\:\${LEVEL}\,\host\:\${HOSTNAME}\,\message\:\${MESSAGE}\,\timestamp\:\${TIMESTAMP}\}/dev/null21echo$(date%Y-%m-%d %H:%M:%S)[INFO] Alert sent: [${LEVEL}]${MESSAGE}/var/log/alert.log7.2 钉钉机器人报警示例# 钉钉自定义机器人WebhookDINGTALK_URLhttps://oapi.dingtalk.com/robot/send?access_tokenYOUR_TOKENcurl-s$DINGTALK_URL\-HContent-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/chmodx /opt/scripts/*.sh# 3. 配置crontabcrontab-e# 粘贴所有定时任务# 4. 验证脚本权限和依赖/opt/scripts/auto_backup.sh --dry-run# 5. 检查crontab服务systemctl status crond systemctlenablecrond运维脚本不追求花哨追求可靠、可追溯、可报警。每条定时任务执行结果都要写日志出问题能查到这才是工控运维的基本功。

相关新闻

看门狗驱动与应用:硬件看门狗喂狗、死机自动重启机制实现

看门狗驱动与应用:硬件看门狗喂狗、死机自动重启机制实现

看门狗驱动与应用:硬件看门狗喂狗、死机自动重启机制实现你的工控板死机了,你人还在被窝里——这就是没有看门狗的代价。一、看门狗到底是什么 看门狗(Watchdog Timer,WDT)本质上是一个硬件倒计时器。启动后它开始从预…

2026/7/25 1:01:24阅读更多 →
工控界面方案选型:QT5/QT6 轻量化窗口、无屏纯后台两种开发模式

工控界面方案选型:QT5/QT6 轻量化窗口、无屏纯后台两种开发模式

工控界面方案选型:QT5/QT6 轻量化窗口、无屏纯后台两种开发模式有些工控设备需要人机界面(HMI),有些就是闷头干活不带屏幕。选哪种方案?今天把两条路都铺开,让你少走弯路。一、工控设备两大模式 工控设备的…

2026/7/25 1:01:24阅读更多 →
剑网3智能机器人:5分钟快速搭建的全能游戏助手

剑网3智能机器人:5分钟快速搭建的全能游戏助手

剑网3智能机器人:5分钟快速搭建的全能游戏助手 【免费下载链接】mini_jx3_bot 女生自用剑网三机器人 项目地址: https://gitcode.com/gh_mirrors/mi/mini_jx3_bot 在剑网3的武侠世界中,你是否曾为繁琐的游戏数据查询而烦恼?是否希望有…

2026/7/25 0:59:24阅读更多 →
【关注可白嫖源码】--课程设计--毕业设计--springboot海洋知识交流系统[编号:project23859](案例分析)

【关注可白嫖源码】--课程设计--毕业设计--springboot海洋知识交流系统[编号:project23859](案例分析)

本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。 有需要完整资源的同学,可以在评论区留言【资料或领源码】,我会一 一回复站内私信,发送完整文件 目 录 摘…

2026/7/25 2:27:41阅读更多 →
大模型智能体化推理:架构设计与工程实践

大模型智能体化推理:架构设计与工程实践

1. 大模型智能体化推理的核心概念去年我在参与一个智能客服系统升级项目时,第一次真正体会到LLM(大语言模型)作为自主智能体的潜力。当时我们尝试让GPT-3.5不仅回答用户问题,还能主动收集信息、调用API接口、甚至根据对话进展调整…

2026/7/25 2:27:41阅读更多 →
Spring Boot + Vue + MySQL 全栈项目实战:从零构建旅游分享平台

Spring Boot + Vue + MySQL 全栈项目实战:从零构建旅游分享平台

在实际 Java Web 项目开发中,Spring Boot 作为后端框架,Vue 作为前端框架,配合 MySQL 数据库,构成了当前企业级应用开发的主流技术栈。对于计算机专业的毕业生而言,如何将这三个技术栈整合起来,完成一个功能完整、结构清晰、可部署上线的毕业设计项目,是检验学习成果的关…

2026/7/25 2:27:41阅读更多 →
如何让老旧安卓电视重获新生:mytv-android电视直播软件的终极优化指南

如何让老旧安卓电视重获新生:mytv-android电视直播软件的终极优化指南

如何让老旧安卓电视重获新生:mytv-android电视直播软件的终极优化指南 【免费下载链接】mytv-android 使用Android原生开发的视频播放软件 项目地址: https://gitcode.com/gh_mirrors/my/mytv-android 还在为家中老旧智能电视播放卡顿而烦恼吗?my…

2026/7/25 2:27:41阅读更多 →
Blender 3MF插件:5分钟搞定3D打印工作流优化 [特殊字符]

Blender 3MF插件:5分钟搞定3D打印工作流优化 [特殊字符]

Blender 3MF插件:5分钟搞定3D打印工作流优化 😊 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 还在为3D打印工作流中的格式转换烦恼吗&#xff1…

2026/7/25 2:27:41阅读更多 →
Modbus 协议全面详解:02 工业背景与协议定位

Modbus 协议全面详解:02 工业背景与协议定位

第2章 工业背景与协议定位 学习 Modbus 之前,必须先回答一个问题: 为什么工业现场已经有那么多协议了,Modbus 还活着? 1979 年诞生的协议,为什么到了今天: PLC 还在支持 变频器还在支持 电表还在支持 SCADA 还在支持 IIoT 网关还在支持 甚至很多最新设备的协议列表第一页…

2026/7/25 2:25:41阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 1:01:14阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 1:01:14阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/25 1:01:14阅读更多 →
突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:01:16阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:01:16阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:01:16阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/24 23:01:03阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →