如何防止shell脚本的重入--flock

Linux文件锁flock详解:解决多进程并发文件访问冲突 在Linux/Unix系统中,文件是进程间共享数据的基础媒介。当多个进程或线程并发读写同一文件时,若无协调机制,便会引发竞态条件,导致数据损坏或丢失。文件锁正是解决此类并发访问冲突的核心同步机制之一,它通过在文件级别提供互斥或共享访问控制,确保数据操作的原子性与一致性。其中,flock()作为一种经典的劝告锁,以其清晰的语义和简洁的接口,广泛应用于配置文件保护、日志轮转、脚本防重入等需要整个文件互斥访问的工程实践场景。本文深入解析flock()的劝告锁特性、锁与文件描述符的绑定关系、以及其在Shell脚本中 阅读详情

可重入的函数是安全的。不可重入的函数,每次调用返回的结果,可能是不一致的,即使每次传入的参数是一样的。编程语言里的函数如此,那么linux的shell脚本是不是可重入的呢?答案是:未必。其中,有很大部分的shell脚本是不可重入的。这自然带出问题:如何防止shell脚本的重入?
---------------------------------------摘自某某不会装AC的码农笔录

这里讨论的脚本重入问题,是说在同一时刻,同时调用2次同一个脚本文件。很多时候,我们希望的结果可能有2种,分别是:
1. 多次同时调用同一个脚本文件,只有最先那次调用可以正常跑完成,其余的中断退出;
2. 多次同时调用同一个脚本文件,按照调用次序,一次执行完成了,再继续执行下次(这里隐含了,当前调用的脚本在运行时,其他的脚本调用都被阻塞住,等待当前调用结束);

遇到这个情形,我们自然首先想到了锁,或者类似锁的机制,可以从2个角度下手,一个是从调用者这里下手,一个是从被调用的脚本下手。

从调用者出发,典型的例子是,在crontab里运用flock防止重复执行:

flock -xn /home/wll/test.lock -c "/home/wll/test.sh"

注意:必须确保test.lock和test.sh这2个文件真实存在,test.lock文件可以是一个空文本文件;参数“-n”是非阻塞。

从被调用的脚本下手:

#!/bin/bash

exec 4<>/home/wll/test.lock

flock -n 4
[ $? -eq 1 ] && { echo fail; exit; }
echo $$
sleep 100

echo "finish my shell"

注意:
1. exec的参数语法,请自行查找,后面的数字是[3, 9] 之间的整数;
2. 这里的“-n”是非阻塞的,一旦发现test.lock文件被占用,就打印”echo“,然后退出脚本;
3. 加锁影响的范围是,从开始上锁,到整个脚本执行退出;

最后
1. 在调用flock的时候,可以不使用“-n”参数,阻塞在flock语句行,直到锁文件占用被其他进程释放;
2. 在调用flock的时候,可以使用“-w”参数,设定在阻塞超过多少秒后,从flock语句行主动返回;
3. 在c/c++代码里,也可以调用flock函数,做以上类似的操作,但是需要特别小心,在程序里被阻塞并造成死锁的情况;

 

别再只会crontab -e了!银河麒麟V10 SP2定时任务管理的5个高效技巧与一个常见大坑 本文深入探讨银河麒麟V10 SP2系统中定时任务管理的高效技巧,包括系统级定时任务配置、服务管理选择、输出处理策略、任务防重入方法以及环境变量陷阱的解决方案。特别针对Crontab使用中的常见问题,提供了实用的优化建议和实战案例,帮助系统管理员提升运维效率。 阅读详情

相关推荐

轻量级进程内存统计:基于/proc的RSS与PSS监控脚本实践

在Linux系统运维与开发中,内存监控是保障服务稳定性的关键环节。面对内存占用居高不下或频繁告警的困扰,仅靠free命令判断整体水位往往难以定位根因,而深入理解进程内存概念则是精准排查的基础。RSS与PSS是衡量进程常驻内存的两个核心指标,前者易重复计算共享库,后者按比例分摊更接近真实占用。通过读取/proc文件系统提供的smaps_rollup等接口,可以设计出轻量、无依赖的统计脚本,实现对进程内存的实时采集与排序。这类方案尤其适用于老电脑、低配云主机等资源受限场景,既能避免重量级Agent的额外开销,又

weixin_34235457的博客 368

Shell小技巧(八十七)Shell脚本预防重复执行

基本要求: 运行一个脚本,如果脚本之前运行过并且未结束,则当前执行脚本退出执行。 即脚本同时只能有一个执行进程。 方法1: 例子: #!/bin/bash status=`ps -ef | grep "test1.sh" |grep -v "grep" |grep -v $$ | awk '{ print $2} '` echo ${status} if [ ! -z ${status} ]; then echo "already run!" exit 1 fi while t...

bigwood99的博客 1987

第85章 Shell避免重复执行:脚本运行前检测是否已在执行

脚本重复执行是运维中的常见问题,可能导致数据损坏、资源冲突和系统不稳定。定时任务重叠、手动误操作、多用户并发等都可能引发问题。本章将系统介绍如何有效防止Shell脚本的重复执行,从简单的PID文件到分布式锁,帮助你构建可靠的脚本执行控制机制。

猪猪侠 136

linux bash shell 排它锁 flock 使用方法

两个shell同时执行以下脚本 flock a.lock -c "date; sleep 10; date" 终端1 yeqiang@yeqiang-PC:/tmp$ flock a.lock -c "date; sleep 10; date" 2022年 02月 22日 星期二 16:35:33 CST 2022年 02月 22日 星期二 16:35:43 CST 终端2 yeqiang@yeqiang-PC:/tmp$ flock a.lock -c "date; sleep 10;

hknaruto的专栏 1217

Linux运维shell脚本实战:从骨架搭建到自检清单

在Linux运维工作中,shell脚本是连接人工操作与自动化运维的桥梁。很多人掌握了命令却难以应对生产环境的复杂性,因为脚本不仅要求命令正确,还要具备日志记录、退出码约定、超时保护等工程化特征。本文从脚本骨架的set -euo pipefail、日志函数和退出码设计讲起,深入磁盘、内存、服务进程等巡检场景,再到批量执行、备份轮转与日志排障的实用技巧,最后通过shellcheck和自检清单将零散命令固化为可维护、可交接的自动化工具。无论是刚入门的运维工程师,还是希望转型自动化运维的从业者,都能从中获得一套可落

weixin_29248653的博客 296

Linux运维一键修复与安装脚本实战:从发行版识别到环境部署

Linux系统管理中,运维人员常面临引导损坏、包管理器故障、依赖破损等问题,服务器环境部署也耗时费力。面对这类高频故障,自动化运维脚本成为恢复系统和服务快速上线的关键。一个可靠的一键脚本,核心在于理解Linux发行版的差异——通过/etc/os-release识别系统并匹配相应的包管理器(apt、yum、dnf等),然后基于函数化设计实现grub引导修复、包管理器重建、LNMP与Docker环境安装等功能。脚本设计需注重参数化、日志记录、前置检查以及锁与回滚机制,避免盲目执行导致二次故障。从系统修复到环境装

weixin_33811539的博客 267

shell脚本文件锁——避免脚本重复执行

文章目录1.在shell中实现文件锁的两种方式2.使用flock命令 1.在shell中实现文件锁的两种方式 方法一:利用普通文件 (1)在脚本启动时检查特定文件是否存在,如果存在,则等待一段时间后继续检查,直到文件不存时创建该文件,在脚本结束时删除文件。 (2)为确保脚本在异常退出时文件仍然能被删除,可以借助于trap “cmd” EXIT TERM INT命令。 (3)一般这类文件存放在/var/lock/目录下,操作系统在启动时会对该目录做清理。 方法二:使用flock命令 (1)使用方式如下

喜欢打篮球的普通人 9296

谷粒商城 - 个人笔记(集群部署篇一)

电商后台管理系统+电商系统,掌握微服务的全套方案。该系统有商品服务、仓储服务、订单服务、购物车服务、检索服务、认证中心服务、网关服务、用户服务、秒杀服务、第三方服务。使用SpringBoot+SpringCloud并配套SpringCloud Alibaba系列,引入全套微服务治理方案:Nacos注册中心/配置中心、Feign远程调用、Gateway网关、Redisson缓存、基于ElasticSearch7全文检索、异步编排与线程池、RabbitMQ柔性事务方案、Redisson分布式锁、分布式信号量等。

知行 4008

Linux:如何防止同一个shell脚本同时执行?

如何防止同一个shell脚本同时执行?

netyeaxi的专栏 911

关于MII、RMII、GMII、RGMII、PHY、网络变压器、RJ45的硬件总结

文章目录前言一、网络传输结构及原理1.以太网的工作原理2.TCP/IP协议3.数据链路层(MAC)二、介质独立接口MII,RMII,GMII,RGMII1.MII(Media Independent interface)2.RMII(Reduced Media Independent Interface)3.GMII(Gigabit Medium Independent)4.RGMII(Reduced Gigabit Media Independent Interface)三、物理层芯片(PHY)二、使用步

weixin_44415816的博客 3万+

ST7102驱动移植与调试实战

本文详细介绍了在君正T40平台上移植和调试ST7102 LCD驱动芯片的实战经验。内容涵盖硬件接口配置、时序参数调整、寄存器初始化序列编写及常见问题解决,重点解析了ST7102单芯片集成显示与触控功能的特性,为嵌入式设备显示驱动开发提供实用指南。

k6l7m8n9的博客 1413

shell脚本单实例互斥

##shell执行脚本单实例互斥问题 比如说有一个周期性(cron)备份mysql的脚本,或者rsync脚本,如果出现意外,运行时间过长, 很有可能下一个备份周期已经开始了,当前周期的脚本却还没有运行完,显然我们都不愿意看到这样的情况发生。其实只要对脚本自身做一些改动,就可以避免它被重复运行。   #!/bin/bash LOCK_NAME="/tmp/my.lock" if

jsyxcjw的专栏 3021

CEEMDAN算法及其应用

本博文主要介绍CEEMDAN算法的原理及其在信号去噪方面的应用

总结论文中的算法并给出论文的复现代码 6万+

linux 重复执行脚本,防止shell脚本重复执行的代码

例如,要求脚本只能顺序访问某个资源,例如磁盘文件等,就可以参考下面的实现。#!/bin/bash## file locking using bash.# ver 0.1.6## author : malundao ( malundao@sina.com )# date : 2011-08-31# ref : http://unix.derkeiler.com/Newsgroups/com...

weixin_29118723的博客 335

【linux】解决报错:Network error: Connection refused

【linux】解决报错:Network error: Connection refused

weixin_44502754的博客 4936

【实战圣经】YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS

本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。

m0_71589036的博客 251

Shell脚本防重复执行:从PID锁到flock的可靠方案与实践

后台脚本和定时任务在长期运行时,常因重复启动导致数据错乱、资源耗尽等问题。要实现单实例可靠运行,需理解进程锁与文件锁的原理。本文从文件锁、原子操作等基础概念出发,对比pgrep进程匹配、PID锁文件、flock文件锁及mkdir目录锁等方案的优劣,并结合cron定时任务、自动化测试等场景给出可直接使用的模板与排查思路,帮助开发者避免重复执行带来的线上事故。

weixin_29224309的博客 260

2023年全国城市房价分布网格数据

本文介绍了一份2023年全国主要城市房价分布的网格数据,数据以250米×250米的网格为单位,记录了住宅小区数量、均价、最高价和最低价等信息。数据采用GCJ-02坐标系,提供ShapeFile、GeoJSON和CSV三种格式

J_Giser的博客 376

Shell脚本实战指南:从入门到精通,掌握运维自动化核心技能

Shell脚本作为Linux系统运维和自动化任务的核心工具,其本质是通过命令行解释器执行一系列预定义指令,实现流程自动化。其技术价值在于高效组合系统命令,充当不同工具间的“胶水”,将重复、易错的手工操作转化为可靠、可复用的自动化流程。在应用场景上,Shell脚本广泛应用于文件批量处理、系统监控告警、自动化部署、日志分析等日常运维工作。通过掌握变量、循环、函数及文本处理三剑客(grep、sed、awk)等核心要素,结合最佳实践避开常见陷阱,可以构建健壮的生产级脚本。本文以实战为导向,深入解析Shell脚本编程

weixin_34161083的博客 402

多模态大模型:技术原理与实战 全球多模态大模型介绍

关键词:多模态大模型、深度学习、计算机视觉、自然语言处理、跨模态学习、迁移学习、人工智能随着人工智能技术的飞速发展,多模态大模型已经成为了当前AI领域最热门的研究方向之一。多模态大模型能够同时处理和理解多种类型的数据,如文本、图像、音频和视频等,这为AI系统在复杂场景下的应用提供了更加强大和灵活的能力。本文将深入探讨多模态大模型的技术原理,介绍其实战应用,并对全球主要的多模态大模型进行全面的介绍和比较。

AI天才研究院 4268

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

深度解析Linux文件锁flock:原理、实战与避坑指南

多进程协作是工程实践中绕不开的课题,而并发控制则是保证数据一致性的关键环节。当多个进程需要同时访问同一资源时,如何实现可靠的互斥与协调?文件锁作为进程间一种轻量级同步机制,提供了简洁有效的解决方案。其中,Linux自带的flock便是最常用的工具之一,它基于文件描述符与内核对象关联,支持共享锁与独占锁,且随进程退出自动释放,避免了传统pid文件方案的残留问题。从定时任务防重入、配置文件热更新到多进程任务分发,flock在单机场景下发挥着重要作用。当然,使用flock也需留意开源模式、fd复制等细节,避免锁失

weixin_34354173的博客 362

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

锁的排障实战:从apt缓存锁到flock文件锁原理

在并发编程与系统运维中,锁是保证共享资源安全访问的核心机制。无论是多进程同时操作文件,还是包管理器更新软件包,一旦锁处理不当,就会遇到诸如“Waiting for cache lock”或“unable to lock the binary”等典型报错。理解文件锁的底层原理,掌握flock、fcntl等工具的使用方式,是解决这类问题的关键。文件锁本质上是通过对文件描述符或进程加标记,实现互斥访问。合理地使用阻塞、非阻塞或超时等锁策略,不仅能避免数据错乱,还能大幅提升系统稳定性。本文从apt缓存锁与CLI二进

weixin_29198045的博客 250

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Linux定时任务详解:Cron表达式、crontab实操、日志排错与邮件告警

Linux 定时任务的主线可以概括为:使用crontab保存任务,由crond持续读取并按 Cron 表达式触发命令。表达式按照“分、时、日、月、周”排列,分别用于全匹配、列举、范围和步长。真正可靠的定时任务不能停留在“写完一行表达式”。复杂逻辑应放入脚本,命令使用绝对路径,输出写入可轮转日志,长任务使用flock防止重叠,失败时发送告警,并通过或区分“Cron 是否触发”和“脚本是否成功”。

Dawn_5000的博客 338

Linux OOM卡死自救:手写bash脚本主动干预内存危机

Linux服务器在内存耗尽时,OOM killer未必能及时响应,系统常因内存回收与swap抖动而陷入卡死。理解/proc/meminfo中的MemAvailable指标,是设计内存监控方案的关键起点。通过bash脚本主动监控可用内存、合理运用drop_caches清理缓存,并借助保护名单识别真正占用内存的进程,可以在系统完全失联前完成干预。这类轻量级守护脚本适合云服务器、容器环境与低配VPS等典型运维场景,为后端开发、SRE等技术人员提供了一种不依赖内核兜底、可自主掌控的Linux内存管理实践。

diaoju3333的博客 373

Bash到SKILL:从命令脚本到可编排AI技能的工程演进

Agent(智能体)是现代自动化系统的核心抽象,其本质是将重复性任务封装为可发现、可组合、可治理的能力单元;其技术实现不依赖大模型API或重型框架,而始于轻量可控的命令行脚本。Bash凭借零依赖、原生进程控制与微秒级启动特性,成为构建高可靠技能执行层的理想载体;通过标准化输入输出契约、元数据注入、幂等性保障与Unix Socket通信协议,可系统性地将Bash脚本升级为符合SKILL范式的原子能力。该路径广泛应用于CI/CD、硬件验证、安全审计等强稳定性要求场景,为AI工程化落地提供可调试、可审计、可渐进演

weixin_33797791的博客 454

Ubuntu Cron 深度解析:原理、陷阱与高可靠配置实践

Cron 是 Linux 系统中最基础也最易被误用的定时任务调度机制,其本质是事件驱动的守护进程,依赖严格的时间表达式语法、隔离的执行环境和明确的权限上下文。理解 cron 的五字段规则、PATH 环境缺失、shell 差异(dash vs bash)及日志重定向陷阱,是保障自动化稳定运行的前提。它广泛应用于系统监控、日志轮转、备份清理等运维场景,也是 DevOps 流水线中定时触发环节的关键底座。本文聚焦 Ubuntu 系统(20.04/22.04/24.04 LTS)下的真实运作机制,深入剖析 cron

weixin_34174105的博客 485
上一篇: 谈谈随机crash的问题
下一篇: linux程序依赖的第三方库相互冲突问题
RyanLeiWang
博客等级 码龄20年 184粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值