工控必备Shell脚本开发:自动挂载、日志归档、看门狗、程序守护脚本
工控必备Shell脚本开发自动挂载、日志归档、看门狗、程序守护脚本工控设备没有人在旁边盯着出问题得自己修自己扛。Shell脚本就是工控系统的瑞士军刀——挂磁盘、管日志、喂狗、保活一个脚本搞定一个活。一、Shell脚本在工控中的重要性工控设备部署在现场无人值守。U盘插上去要自动挂载日志满了要自动归档程序崩了要自动重启系统卡死要看门狗强制恢复——这些活全靠Shell脚本干。Shell脚本的优势无需编译、直接运行、依赖极少。工控板资源有限装Python解释器可能都嫌重但busybox自带ash/sh任何Linux板子都能跑Shell。二、脚本基础语法速查写工控脚本不需要精通Shell所有特性掌握以下核心语法足矣2.1 变量与条件#!/bin/bash# 变量赋值等号两边不能有空格DEVICE_PORT/dev/ttyS0BAUD_RATE115200# 条件判断if[-e$DEVICE_PORT];thenecho串口设备存在elseecho串口设备不存在exit1fi# 数值比较if[$BAUD_RATE-gt9600];thenecho高速串口fi# 字符串比较if[$MODEdebug];thenecho调试模式fi2.2 循环与函数# for循环遍历forportin/dev/ttyS{0..3};doecho检查端口:$portdone# while循环count0while[$count-lt10];doecho计数:$countcount$((count1))done# 函数定义check_process(){localname$1ifpgrep-x$name/dev/null;thenreturn0# 存活elsereturn1# 不存在fi}2.3 关键注意事项变量引用必须加双引号$VAR防止空值导致语法错误脚本头部加set -e遇到错误立即退出不让脚本带着错误继续跑比较用[ ]时运算符和值之间必须有空格三、实战脚本1U盘/SD卡自动挂载工控设备经常需要从U盘或SD卡读取配置文件、更新程序。手动挂载不现实脚本自动检测并挂载。#!/bin/bash# auto_mount.sh - U盘/SD卡自动挂载脚本set-eMOUNT_POINT/mnt/usbLOG_FILE/var/log/auto_mount.loglog_msg(){echo[$(date%Y-%m-%d %H:%M:%S)]$1$LOG_FILE}# 检测可移动存储设备find_usb_device(){fordevin/dev/sd{a,b,c}{1,2,3};doif[-b$dev];then# 检查是否已在挂载if!mountpoint-q$MOUNT_POINT;thenecho$devreturn0fifidonereturn1}# 挂载设备mount_device(){localdev$1mkdir-p$MOUNT_POINT# 尝试挂载支持常见文件系统ifmount-tvfat,ext4,ntfs-3g$dev$MOUNT_POINT2/dev/null;thenlog_msg挂载成功:$dev-$MOUNT_POINTreturn0elselog_msg挂载失败:$devreturn1fi}# 安全卸载umount_device(){ifmountpoint-q$MOUNT_POINT;thensync# 先刷新缓冲区umount$MOUNT_POINTlog_msg卸载完成:$MOUNT_POINTfi}# 主逻辑DEVICE$(find_usb_device)if[-n$DEVICE];thenmount_device$DEVICEelselog_msg未检测到可挂载设备fi配合udev规则可实现真正的插上即挂载# /etc/udev/rules.d/85-usb-mount.rulesACTIONadd,KERNELsd[a-z][1-9],RUN/usr/local/bin/auto_mount.shACTIONremove,KERNELsd[a-z][1-9],RUN/usr/local/bin/auto_umount.sh四、实战脚本2日志归档脚本工控程序24小时运行日志文件持续增长磁盘迟早撑爆。归档脚本按日期分割、压缩旧日志、自动清理过期文件。#!/bin/bash# log_archive.sh - 日志归档与自动清理脚本set-eLOG_DIR/var/log/appARCHIVE_DIR/var/log/app/archiveMAX_ARCHIVE_DAYS30# 保留30天归档MAX_LOG_SIZE_MB100# 单个日志文件超过100MB就归档mkdir-p$ARCHIVE_DIR# 获取当前日期标签DATE_TAG$(date%Y%m%d)# 扫描日志目录归档大文件forlog_filein$LOG_DIR/*.log;do[-f$log_file]||continue# 检查文件大小KB为单位file_size_kb$(du-k$log_file|cut-f1)file_size_mb$((file_size_kb/1024))if[$file_size_mb-ge$MAX_LOG_SIZE_MB];then# 归档拷贝压缩清空原文件archive_name$(basename$log_file.log)_${DATE_TAG}.log.gzcp$log_file${ARCHIVE_DIR}/${DATE_TAG}_tmpgzip-c${ARCHIVE_DIR}/${DATE_TAG}_tmp${ARCHIVE_DIR}/${archive_name}rm${ARCHIVE_DIR}/${DATE_TAG}_tmp# 清空原日志文件不是删除进程还在写truncate-s0$log_file2/dev/null||\$log_file# truncate不可用时用重定向清空echo[$(date)] 归档完成:$log_file(${file_size_mb}MB)fidone# 清理过期归档find$ARCHIVE_DIR-name*.log.gz-mtime$MAX_ARCHIVE_DAYS-deleteecho[$(date)] 过期归档清理完成${MAX_ARCHIVE_DAYS}天关键细节用truncate或重定向清空日志而不是删除文件因为进程仍然持有文件描述符——删了文件进程还在往幽灵文件里写磁盘空间照涨不误。五、实战脚本3看门狗喂狗脚本看门狗是工控系统的最后防线——软件卡死时看门狗超时触发硬件复位强制重启系统。喂狗就是告诉看门狗我还活着。#!/bin/bash# watchdog_feed.sh - 看门狗喂狗脚本set-eWDOG_DEVICE/dev/watchdogFEED_INTERVAL10# 每10秒喂一次看门狗超时通常设30秒MAX_FEED_RETRIES3# 检查看门狗设备是否存在if[!-e$WDOG_DEVICE];thenecho看门狗设备不存在:$WDOG_DEVICEexit1fi# 打开看门狗设备写入任意字符即喂狗# 注意一旦打开必须持续喂狗否则超时系统复位exec3$WDOG_DEVICEecho看门狗喂狗启动间隔:${FEED_INTERVAL}秒feed_count0whiletrue;do# 写入喂狗字符forretryin$(seq1$MAX_FEED_RETRIES);doifecho13;thenfeed_count$((feed_count1))breakelseecho喂狗失败重试$retry/$MAX_FEED_RETRIESsleep1fidone# 额外检查关键进程是否存活if!pgrep-xmain_app/dev/null;thenecho关键进程异常停止喂狗等待看门狗复位系统exec3-# 关闭看门狗停止喂狗触发超时复位exit1fisleep$FEED_INTERVALdone这段脚本有两个核心机制正常喂狗每10秒写一次/dev/watchdog告知硬件系统正常运行主动停喂检测到关键进程崩溃时主动关闭看门狗文件描述符不再喂狗让看门狗超时触发硬件复位这不是简单的定时写文件而是把进程健康检查和系统复位联动起来——软件自己发现问题时主动触发重启比等看门狗被动超时更快更可控。六、实战脚本4程序守护脚本工控程序崩溃是常态——内存泄漏、通信超时、硬件异常都可能导致进程退出。守护脚本的任务是检测到进程不在立即重启。#!/bin/bash# process_guard.sh - 程序守护脚本set-uAPP_NAMEdata_collectorAPP_CMD/opt/app/data_collector --config /etc/app/config.iniAPP_DIR/opt/appCHECK_INTERVAL5RESTART_DELAY3MAX_RESTART_COUNT10# 一小时内最多重启10次防止无限重启循环RESTART_WINDOW3600# 重启计数窗口1小时restart_count0window_start$(date%s)log_msg(){logger-tguard[$APP_NAME]$1}whiletrue;doifpgrep-x$APP_NAME/dev/null;then# 进程存活重置重启计数窗口restart_count0window_start$(date%s)sleep$CHECK_INTERVALcontinuefi# 进程不存在now$(date%s)elapsed$((now-window_start))# 重置窗口计数if[$elapsed-ge$RESTART_WINDOW];thenrestart_count0window_start$nowfi# 检查重启次数限制restart_count$((restart_count1))if[$restart_count-ge$MAX_RESTART_COUNT];thenlog_msg重启次数超限(${MAX_RESTART_COUNT}次/${RESTART_WINDOW}秒)停止守护# 可选触发看门狗或告警通知exit1filog_msg进程$APP_NAME不存在第${restart_count}次重启# 重启进程cd$APP_DIRnohup$APP_CMD/var/log/app/guard.log21sleep$RESTART_DELAYdone这个脚本有防无限重启机制1小时内重启超过10次就停止守护。连续崩溃说明问题不是偶发的继续重启只会反复日志刷屏不如停下来报警让运维介入。七、Shell脚本调试技巧7.1 bash -x 调试模式# 运行脚本时开启调试每行执行前都会打印bash-x/usr/local/bin/auto_mount.sh# 输出类似# MOUNT_POINT/mnt/usb# find_usb_device# for dev in /dev/sda1 /dev/sda2 /dev/sdb1# [ -b /dev/sda1 ]7.2 set选项组合#!/bin/bashset-e# 遇到错误立即退出set-u# 引用未定义变量时报错防止$VAR空值导致意外set-opipefail# 管道中任一命令失败整条管道返回失败工控脚本建议加上这三行让脚本在错误时立即停止而不是带着问题继续跑——继续跑往往比停下来后果更严重。八、crontab定时执行配置有些脚本不需要常驻运行定时执行即可# 编辑crontabcrontab-e# 每天凌晨2点执行日志归档02* * * /usr/local/bin/log_archive.sh# 每5分钟检查U盘挂载*/5 * * * * /usr/local/bin/auto_mount.sh# 每小时检查磁盘空间超过90%报警0* * * * /usr/local/bin/disk_check.sh# crontab时间格式分 时 日 月 周# * 表示任意值# */5 表示每5分钟# 0 2 * * * 表示每天2:00Shell脚本在工控里不是配角是基础设施。挂载、归档、喂狗、守护——四个脚本覆盖了工控设备最核心的运维自动化需求。写好这些脚本设备才能在无人现场稳稳运行。

相关新闻

Gemini 3.6 Flash与3.5 Flash Lite:轻量级AI模型选型与API实战指南

Gemini 3.6 Flash与3.5 Flash Lite:轻量级AI模型选型与API实战指南

在 AI 大模型快速迭代的背景下,Google 近期推出了 Gemini 系列的两个新成员:Gemini 3.6 Flash 和 Gemini 3.5 Flash Lite。这两个模型并非追求极致性能的旗舰版本,而是针对特定场景优化的轻量级解决方案,尤其强调在成本、响应速度…

2026/7/24 2:02:29阅读更多 →
Spring Boot Starter实现基于 Redis + Lua 的分布式锁封装与实践

Spring Boot Starter实现基于 Redis + Lua 的分布式锁封装与实践

Spring Boot Starter实现基于 Redis Lua 的分布式锁封装与实践一、涉及的技术知识点 1.1 Redis 分布式锁核心原理知识点说明Redis 单线程模型保证命令按序执行,天然支持原子操作SETNX(SET if Not eXists)只有 key 不存在时才设置成功&#x…

2026/7/24 2:00:28阅读更多 →
Kiro Steering 文件 Inclusion 模式详解

Kiro Steering 文件 Inclusion 模式详解

Kiro Steering 文件 Inclusion 模式详解 一、什么是 Steering 文件 Steering 文件是 Kiro 的上下文注入机制——通过 Markdown 文件向 Kiro 提供额外的指令、规范和上下文信息,影响 Kiro 在对话中的行为方式。 它的作用类似于给 Kiro 制定"工作手册"&…

2026/7/24 2:00:28阅读更多 →
AI工具链助力学术开题:从文献综述到研究设计

AI工具链助力学术开题:从文献综述到研究设计

1. 学术写作的智能化转型契机最近在指导本科生论文开题时,发现一个有趣现象:超过70%的学生在开题报告阶段就陷入文献综述的泥潭。他们要么被海量文献淹没,要么苦于无法精准提炼研究空白。这让我开始系统测试各类AI写作工具的组合应用&#xf…

2026/7/24 3:37:01阅读更多 →
ShotPlan视频生成:可学习规划标记与FRoPE位置编码技术解析

ShotPlan视频生成:可学习规划标记与FRoPE位置编码技术解析

在视频生成领域,从文本描述直接生成具有电影级镜头语言和连贯叙事结构的视频一直是个技术难点。传统视频扩散模型虽然能生成视觉上合理的片段,但往往缺乏导演视角的镜头规划能力,导致视频节奏平淡、视角单一,难以满足专业影视制作…

2026/7/24 3:37:01阅读更多 →
AR远程协助平台:工业4.0时代的智能协作解决方案

AR远程协助平台:工业4.0时代的智能协作解决方案

1. AR远程协助平台:工业与服务协作的革新者在工业4.0和数字化转型浪潮中,AR远程协助平台正悄然改变着传统工业和服务领域的协作方式。想象一下,当一位现场工程师遇到设备故障时,只需戴上AR眼镜,远在千里外的专家就能&q…

2026/7/24 3:37:01阅读更多 →
AI毕业设计助手:智能选题与高效写作全流程解析

AI毕业设计助手:智能选题与高效写作全流程解析

1. 项目背景与痛点解析毕业设计季的校园里总能看到这样的场景:凌晨三点的实验室亮着灯,咖啡杯堆满垃圾桶,学生们顶着黑眼圈在电脑前拼命赶进度。去年指导毕业设计时,我发现90%的学生都存在不同程度的焦虑症状,其中67%的…

2026/7/24 3:37:01阅读更多 →
多模态学习七日实践:从原理到代码实现

多模态学习七日实践:从原理到代码实现

1. 项目概述:什么是"转多模态day7""转多模态day7"这个标题看似简单,实则蕴含了深度学习领域一个重要的技术方向——多模态学习(Multimodal Learning)。作为从业者,我理解这个标题可能记录的是某人…

2026/7/24 3:37:01阅读更多 →
CTF 比赛到底怎么打,新手入门题型解析与备赛策略

CTF 比赛到底怎么打,新手入门题型解析与备赛策略

为什么 CTF 是新手实战的最佳起点对于刚踏入网络安全领域的新手来说,最大的痛点往往不是“学不会”,而是“没处练”。现实中的渗透测试有着严格的法律边界和复杂的业务流程,初学者很难在合法合规的前提下找到合适的靶场进行深度演练。而 CTF&…

2026/7/24 3:35:01阅读更多 →
Go语言静态资源打包方案对比与实践指南

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

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

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

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

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

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

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

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

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

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

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

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

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

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

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

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

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

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

2026/7/23 18:58:18阅读更多 →