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

发布时间:2026/7/25 1:02:24

系统运维脚本:定时采集、定时备份、远程重启、磁盘空间监控
系统运维脚本定时采集、定时备份、远程重启、磁盘空间监控工控设备部署在野外你不可能天天往现场跑——运维自动化不是选择题是必答题。一、工控运维为什么必须自动化工业控制设备的典型运行环境工厂车间、户外机柜、偏远站点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运维脚本不追求花哨追求可靠、可追溯、可报警。每条定时任务执行结果都要写日志出问题能查到这才是工控运维的基本功。

相关新闻

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

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

2026/7/25 1:02:24

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

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

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

2026/7/25 1:02:24

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

基于SpringBoot的地震减灾救援中心系统任务书

基于SpringBoot的地震减灾救援中心系统任务书

2026/7/25 0:52:24

一、课题研究背景与意义 地震属于突发性强、破坏力大的自然灾害,一旦发生极易造成人员伤亡、建筑损毁、物资短缺等重大灾害损失。在传统地震减灾救援工作中,救援调度、灾情上报、物资调配、人员安置、救援记录统计多依靠人工汇总、线下沟通、纸质登记的方…

智能代理系统架构设计与优化实践

智能代理系统架构设计与优化实践

2026/7/25 5:02:50

1. 项目概述在AI技术快速发展的今天,智能代理(Agent)系统正成为自动化流程和智能决策的核心组件。claudecode的agent定义项目,本质上是一套针对特定业务场景的智能代理框架设计规范。这个项目不是简单地调用现成API,而是从底层定义了agent的行…

步进电机为何不标功率?从电流控制原理到选型实战解析

步进电机为何不标功率?从电流控制原理到选型实战解析

2026/7/25 5:02:50

步进电机,一个在3D打印机、雕刻机、机器人、打印机等精密控制领域无处不在的执行元件。很多工程师和爱好者第一次接触它时,都会有一个共同的疑问:为什么步进电机的规格书上,通常找不到一个明确的“功率”参数,而只有电…

5步实现小爱音箱AI智能升级:从普通音箱到ChatGPT语音助手

5步实现小爱音箱AI智能升级:从普通音箱到ChatGPT语音助手

2026/7/25 5:02:50

5步实现小爱音箱AI智能升级:从普通音箱到ChatGPT语音助手 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 你是否曾想过让小爱音箱拥有…

多门店运维闭环全景架构:监控+告警+工单+SLA+复盘,一套最小可用系统怎么串起来

多门店运维闭环全景架构:监控+告警+工单+SLA+复盘,一套最小可用系统怎么串起来

2026/7/25 5:02:50

多门店运维闭环全景架构:监控告警工单SLA复盘,一套最小可用系统怎么串起来 如果你是一个连锁奶茶品牌的运维工程师,每天面对全国 200 家门店的监控告警,你会怎么做? 今天我们不聊大厂那套复杂的 Prometheus Grafana …

AI驱动的学术写作工具:智能文献综述与结构化写作

AI驱动的学术写作工具:智能文献综述与结构化写作

2026/7/25 5:02:50

1. 项目概述:AI驱动的学术写作革命去年帮导师审阅研究生论文时,我发现一个惊人现象:90%的文献综述都存在结构混乱、关键研究遗漏或分析浅表的问题。这促使我开始探索如何用AI技术重塑学术写作流程。"书匠策AI"正是为解决这一痛点而…

C++序列化与反序列化:从原理到实践,构建高效数据持久化方案

C++序列化与反序列化:从原理到实践,构建高效数据持久化方案

2026/7/25 4:52:50

1. 项目概述:从内存对象到持久化字节流 在C的世界里,我们每天都在和内存中的对象打交道。这些对象有复杂的结构,包含各种基本类型、字符串、容器,甚至嵌套着其他对象的指针。当程序运行时,它们生动地存在于RAM中&…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/24 4:17:29

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/24 19:29:25

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/23 1:54:13

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

挑战一天速通Spring全家桶!

挑战一天速通Spring全家桶!

2026/7/25 0:02:22

不知道各位Java好大哥们闲的时候会不会去关注Spring目前的官网,你会发现他的slogan是: Spring makes Java Simple。它让Java的开发变得更加简单。某种意义上来说:是Spring成就了Java!但随之而来的就是:由他之后诞生出来的各种组件…

挑战一天速通Java高并发!

挑战一天速通Java高并发!

2026/7/25 0:02:22

有出去面试的朋友肯定深有感受,像我们刚入行那会面试的加分项现在卷得已经成为了面试的基础题(手动狗头)。其中最典型的就属这个Java并发编程了。之前一般只有大厂才会有高并发编程相关的面试内容,但现在只要你入了Java行业就会涉…

从暴雪到米哈游都在用的平衡性评估框架,深度拆解LSTM+胜率归因分析法(附开源工具链)

从暴雪到米哈游都在用的平衡性评估框架,深度拆解LSTM+胜率归因分析法(附开源工具链)

2026/7/25 0:02:22

更多请点击: https://kaifayun.com 第一章:AI 游戏平衡性分析 现代游戏开发中,AI 不再仅用于控制 NPC 行为,更被深度整合进游戏平衡性调优流程。通过强化学习与对抗性仿真,AI 可以在数百万局对局中自动识别数值失衡点…