LinuxShell脚本如何加锁_flock使用实战讲解【教程】

admin 百科 13
flock是Linux基于文件描述符和内核advisory lock的轻量安全加锁工具,自动释放、作用域明确、原生集成、无需外部依赖;最常用写法为exec分配fd后flock -n加非阻塞锁。

LinuxShell脚本如何加锁_flock使用实战讲解【教程】-第1张图片-佛山资讯网

Linux Shell 脚本加锁最常用、最可靠的方式就是 flock,它基于文件描述符和内核级的 advisory lock(建议性锁),轻量、安全、无需额外依赖,特别适合防止脚本并发重复执行。

flock 是什么?为什么选它?

flock 是 Linux 提供的命令行工具,封装了 fcntl(F_SETLK) 系统调用,对一个文件(通常是锁文件)加独占锁。它的核心优势是:

  • 自动释放:进程退出(无论正常或被 kill)时,内核自动释放锁,不会死锁
  • 作用域明确:锁绑定在文件描述符上,同一进程多次 flock 同一文件不冲突
  • 支持脚本原生集成:可直接用重定向或 -c 方式包裹命令,写法简洁
  • 不依赖外部服务(如 Redis、数据库),纯本地文件锁

最常用写法:给整个脚本加锁

在脚本开头用 flock 包裹主逻辑,推荐使用文件描述符方式(更健壮):

#!/bin/bash
exec 200> /var/lock/myjob.lock
flock -n 200 || { echo "Another instance is running. Exit."; exit 1; }
<h1>✅ 这里放你的实际任务(如备份、清理、推送等)</h1><p>echo "Job started at $(date)"
sleep 10
echo "Job done."</p><h1>✅ 脚本结束,fd 200 关闭 → 锁自动释放</h1><p>

登录后复制

说明:

  • exec 200> ...:分配文件描述符 200 指向锁文件(仅创建/打开,不写内容)
  • flock -n 200:尝试非阻塞加独占锁;失败立即报错退出(-n 是关键,避免卡住)
  • 锁文件路径建议用 /var/lock/(需有写权限),避免放在 /tmp(可能被清理)

按需加锁:只锁关键区段(非全脚本)

如果脚本较长,只想保护某一段临界区(比如写配置、更新数据库),可用子 shell + flock -c

标签: linux redis app 工具 常见问题 作用域 shell脚本 为什么 red

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~