0

我正在开发一个 ubuntu 16.04 盒子:

红宝石 2.3.1p112

文件系统:XFS

我编写了一个 ruby​​ 脚本,它将小而独特的文本文件写入一组文件夹,每次写入将在大约 5 秒内发生,并且每次写入的文件夹都是随机的。

但有时会发生此错误:

"Permission denied @ rb_sysopen" 

奇怪的是它可能发生在同一个文件夹上,该文件夹在一分钟左右之前可以正常写入而不会出错。所以这与文件权限无关。

我还通过“xfs_repair”卸载了相关磁盘以进行磁盘检查,没有发现任何异常,并且在我重新安装它之后,同样的错误会以不规则的方式出现。

请问有什么提示吗?

4

1 回答 1

1

无法推测根本原因,但如果您绝对确定这是一个暂时性问题并且您只需要让它工作,您可以尝试 Ruby 的retry.

def write_file(file, content)
  File.write(file, content)
rescue Errno::EACCES
  retry
end

我还会添加重试限制,以防万一这不是暂时的。

def write_file(file, content)
  retries ||= 3
  return if (retries -= 1) == 0

  File.write(file, content)
rescue Errno::EACCES
  retry
end

如果这对时间敏感,您可能还需要sleep在其中放置一个。你需要进行实验。请注意不要将这段代码变成阻塞代码。

显然,这种蛮力远非理想,但有时你必须做你必须做的事情。

于 2018-01-28T00:11:18.230 回答