升级Ubuntu至22.04后Dovecot无法启动,如何提升ARG_MAX?
Ubuntu 20.04升级至22.04后Dovecot启动失败:参数列表过长问题解决
问题描述
系统升级后执行启动命令时出现报错:
$ sudo dovecot -F doveconf: Fatal: execvp(/usr/sbin/dovecot) failed: Argument list too long
当前用户与root用户的ARG_MAX值存在差异:
$ sudo getconf ARG_MAX 2097152 $ getconf ARG_MAX 6291456
已尝试操作
- 在
/etc/security/limits.conf中添加文件描述符限制:root soft nofile 65535 root hard nofile 65535 - 在
dovecot.service中取消注释LimitNOFILE=65536 - 尝试通过
ulimit、sysconf、exec排查问题,但未解决报错
解决方案
1. 提升root用户的ARG_MAX值
ARG_MAX是内核限制的命令行参数与环境变量总大小,可通过以下方式修改:
- 临时生效:执行命令立即调整
sudo sysctl -w kernel.arg_max=6291456 - 永久生效:编辑
/etc/sysctl.conf文件,添加或修改配置:
执行kernel.arg_max=6291456sudo sysctl -p让配置立即生效
2. 排查Dovecot配置导致的参数膨胀
若修改ARG_MAX后仍报错,需检查配置是否存在冗余:
- 合并重复配置:从
doveconf -n输出可见,有两个重复的local_name mail.*.nl块(分别对应imap和pop3),可合并为单个配置块减少参数:local_name mail.*.nl { ssl_ca = </etc/ssl/certs/ca-certificates.crt ssl_cert = </etc/letsencrypt/live/*.nl/fullchain.pem ssl_key = # hidden, use -P to show it protocol imap { } protocol pop3 { } } - 跳过doveconf直接启动:执行
sudo /usr/sbin/dovecot -F,判断是否是doveconf生成参数时导致长度超标 - 检查systemd服务环境变量:编辑
dovecot.service,清理无关环境变量注入
验证操作
修改配置后执行以下命令验证状态:
sudo dovecot -F sudo systemctl restart dovecot sudo systemctl status dovecot
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

