首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修复Procmail中的间歇文件锁定问题

修复Procmail中的间歇文件锁定问题
EN

Server Fault用户
提问于 2013-12-01 03:02:50
回答 2查看 888关注 0票数 1

是否有人在写入mbox文件时见过procmail文件锁定超时的下列问题?对于具有以下procmailrc的用户,每隔几周就会发生一次这种情况:

代码语言:javascript
复制
:0 c:     #copy all mail to "bkp"
bkp

在大多数情况下,这是没有问题的。每隔几周,procmail日志中就会出现以下消息:

代码语言:javascript
复制
procmail: Forcing lock on "bkp"
procmail: Timeout, was waiting for "bkp"

有时候,procmail能够在后缀命令超时(现在设置为一个小时)之前释放锁(或者锁消失)。否则,邮件传递将失败,因为:

代码语言:javascript
复制
relay=local, delay=2001, delays=0.78/0.05/0/2000, dsn=5.3.0,
status=bounced (Command time limit exceeded: "procmail -t -f-")

bkp文件非常大(超过10千兆字节),但这个问题在问题的几个星期之间是间歇性的,对于具有相同procmailrc和千兆字节大小文件的其他用户来说并不是这样的(尽管没有这样大的文件)。

用户不喜欢使用MailDir样式的文件夹,并希望将其保留为mbox文件。是否有一种方法可以重写脚本以允许邮件传递到用户的邮箱,而procmail则等待bkp的锁?我试过:

代码语言:javascript
复制
:0c      #copy all mail to "Saved"
{
 :0:
 bkp
}

编辑:我已经修改了上面的菜谱,从:0w:到:0:既然w在程序上等待,并且在这个语句中没有一个被执行。

如果我在测试期间手动锁定bkp,它将允许在获取邮件之前再次停止接收电子邮件。如果我在后缀超时之前释放锁,邮件将被传递。我还想确定锁定问题的根本原因,但我还无法触发它,除非自己锁定文件。我添加了LOCKTIMEOUT=10来尝试强制这种情况,但在正常的邮件传递中没有成功。

以下是procmail版本信息:

procmail v3.22 2001/09/10版权(c) 1990-2001年,Stephen R. van den Berg版权(c) 1997-2001年,Philip A. Guenther

将问题/答案发送到以下邮件,以提交与procmail相关的邮件列表:

当然,这份清单的订阅和信息请求是:

锁定策略: dotlocking,fcntl()默认rcfile:$HOME/..procmailrc它可以由您的主组写

EN

回答 2

Server Fault用户

回答已采纳

发布于 2015-02-12 19:10:34

我所做的是:

  • 为了测试我的问题,我在机器上构建了一个debian压缩的vmware映像,并将磁盘IOPS限制在40,内存限制在256 my。
  • 我使用后缀,多维柯和促邮方式,就像我把它们安装在我的生产机器上一样。
  • 我创建了一个用户帐户,并创建了大型的多千兆字节文件,以便对procmail进行写入。
  • 在Outlook和本地复制操作运行时,我安装了nmon和sysstat来查看磁盘使用情况、I/O和tps值。

我发现的是:

  • 使用后缀获得命令超时相对容易,但我仍然无法生成用户所经历的锁定错误(除了使用fcntl锁定文件)。
  • 我选择了一个4GB文件作为我的,然后在Outlook 2011中的IMAP文件夹上运行“修复文件夹”,同时在服务器上复制一个1.3GB的文件。这会导致服务器磁盘上产生足够的I/O,从而在procmail中产生超时。

这并不是完全结论性的,但看起来高磁盘负载加上outlook客户端访问procmail试图锁定的邮件文件可以很容易地延迟邮件传递,足够长的时间到达postfix中设置的命令超时。

我没试过的是:

  • 我没有重新编译源代码和禁用锁,根据FAQ 16在procmail源。在我的例子中,这个错误是非常罕见的,并且需要定期旋转保存的文件以使其保持较小。
票数 0
EN

Server Fault用户

发布于 2013-12-02 06:56:41

您考虑过使用较小的每日/每周备份邮箱/文件吗?

您可以使用cron作业将它们移动到主备份中。

man procmailex给出了如何基于date输出获取目标名称的示例。

man procmail给出了如何使用formail来处理带有锁定的邮箱文件的示例。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/558451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档