You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下flock工具使用求助:执行脚本遇文件描述符错误

解决flock脚本的"bad file descriptor"错误

你的问题出在**flock 无法对不存在的文件加排他锁**——默认情况下,flock 不会自动创建你指定的锁文件,当你尝试对一个不存在的文件使用 -x(排他锁)参数时,就会触发"bad file descriptor"错误。

下面是两种可行的修复方案:

方案1:先创建锁文件再使用flock

在创建临时目录后,先手动创建锁文件,再执行加锁逻辑:

#!/usr/bin/env bash
temp_dir="$HOME/temperton/tmp"
mkdir -p "$temp_dir"
# 先创建锁文件
touch "$temp_dir/a"

( flock -x "$temp_dir/a"
  echo '111'
) &

( flock -x "$temp_dir/a"
  echo '222'
) &

方案2:使用文件描述符加锁(更推荐)

这种方式不需要提前创建文件,通过exec打开文件描述符时会自动创建文件,同时避免一些路径相关的问题:

#!/usr/bin/env bash
temp_dir="$HOME/temperton/tmp"
mkdir -p "$temp_dir"
lock_file="$temp_dir/a"

( exec 9>"$lock_file"
  flock -x 9
  echo '111'
  exec 9>&- # 关闭文件描述符
) &

( exec 9>"$lock_file"
  flock -x 9
  echo '222'
  exec 9>&-
) &

这里的逻辑是:

  • exec 9>"$lock_file" 打开文件描述符9指向锁文件(不存在则自动创建)
  • flock -x 9 对文件描述符9对应的文件加排他锁
  • exec 9>&- 执行完后关闭文件描述符,释放资源

两种方案都能解决你的错误,方案2在脚本复杂场景下更可靠,因为它直接操作文件描述符,不会因为路径变化等问题出现意外。

内容的提问来源于stack exchange,提问作者user5047085

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:04:37