← 中文资源

简体中文版本

Bash flock 单实例锁

用 flock 文件锁确保只运行一个脚本实例。

阅读英文原文

示例说明

用 flock 文件锁确保只运行一个脚本实例。本示例属于安全边界场景,提供可直接复制使用的bash代码片段,附带边界条件与使用注意事项。

技术要点

  • exec 9 重定向文件描述符
  • flock -n 非阻塞获取锁
  • 获取失败说明已有实例运行

代码解读

上述代码实现了Bash flock 单实例锁的核心逻辑。用 flock 文件锁确保只运行一个脚本实例。代码中包含输入校验、核心算法和结果返回三个部分。关键在于正确处理边界情况,例如空输入、非法参数和并发场景。exec 9 重定向文件描述符,flock -n 非阻塞获取锁。这些设计确保代码在生产环境中的健壮性。

使用建议

在实际项目中使用本示例时,建议先理解Bash flock 单实例锁的适用场景与限制条件。获取失败说明已有实例运行。根据具体业务需求调整参数配置,并编写单元测试覆盖正常路径与边界情况。本代码片段可直接集成到现有项目中,或作为参考实现自行扩展。

代码示例

#!/bin/bash
LOCKFILE="/var/run/myscript.lock"
exec 9>"$LOCKFILE"
if ! flock -n 9; then
  echo "another instance is running" >&2
  exit 1
fi
echo "acquired lock, running"
sleep 30
echo "done"