我有一个愚蠢的 sendmail aliases.local 文件设置用于将电子邮件传递到 procmail。这是一个在古老的 Solaris 系统上运行的设置。现在我在 RHEL6 系统上运行它:
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.2 (Santiago)
所以我有这个 /etc/mail/aliases.local 文件:
users-log: "|/usr/bin/procmail /auto/data/users/logs/.procmailrc"
/auto/data/users/logs/.procmailrc 看起来像这样:
# cat /auto/data/users/logs/.procmailrc
MAILDIR=/auto/data/users/logs/
:0
responselog
据我了解,procmail 只会将电子邮件写入文件 /auto/data/users/logs/responselog。但由于某种原因,我看到 procmail 进程的数量在增长。
# ps -ef | grep procmail | wc -l
19
# sleep 2
# ps -ef | grep procmail | wc -l
23
而且这个数字还在继续增长。如果我执行 strace -p 我会得到以下输出:
# ps -ef | grep procmail
mail 2872 2861 0 17:05 ? 00:00:00 /etc/smrsh/procmail /auto/data/users/logs/.procmailrc
...
# strace -p 2872
Process 2872 attached - interrupt to quit
fcntl(6, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=1697659298, len=0}
并且该过程就挂在那里。这是怎么回事?我是否错误配置了 procmail?
答案1
感谢杰夫·夏勒。他的评论导致了问题的解决。
响应日志的大小约为 1697659298 字节吗?可能 procmail 正在尝试附加到一个大文件并自行备份。 – 杰夫·夏勒 20 小时前
假设有一个 cron 作业运行来轮换日志文件并缩小其大小。一旦我修复了那个 cronjob,问题就消失了。我还发现 Solaris 系统上的 procmail 是使用不同的文件锁定选项构建的。在 Solaris 上procmail -v
显示Locking strategies: dotlocking, fcntl(), lockf()
和在 Linux 上procmail -v
显示Locking strategies: dotlocking, fcntl()
。不确定那是什么意思。如果有人知道请评论。
我找到了这个链接:http://pm-doc.sourceforge.net/doc/#compiling_procmail_and_choosing_locking_scheme