OpenDKIM 过滤器:无法创建监听套接字

OpenDKIM 过滤器:无法创建监听套接字

你好,我在 maillog 中不断收到此错误。有什么想法吗

Jul 22 10:16:52 veepiz opendkim[5145]: OpenDKIM Filter: Unable to bind to port inet:20209@localhost: Address already in use
Jul 22 10:16:52 veepiz opendkim[5145]: OpenDKIM Filter: Unable to create listening socket on conn inet:20209@localhost
Jul 22 10:16:52 veepiz opendkim[5145]: smfi_opensocket() failed

#ps aux | grep opendkim
opendkim  1361  0.0  0.1  40424   780 ?        Ss   10:11   0:00 /usr/local/sbin/opendkim -x /etc/opendkim.conf
opendkim  1362  0.0  0.2  56948  1508 ?        Sl   10:11   0:00 /usr/local/sbin/opendkim -x /etc/opendkim.conf
opendkim  2256 19.6  0.1  40424   928 ?        Ss   10:16   1:18 /usr/local/sbin/opendkim -x /etc/opendkim.conf
root     20733  0.0  0.1  61224   740 pts/0    S+   10:23   0:00 grep opendkim


#netstat -nlp | grep 20209
tcp        0      0 127.0.0.1:20209             0.0.0.0:*                   LISTEN      1362/opendkim

答案1

问题原来是缺少 opendkim 进程中指定的文件夹/etc/opendkim.conf

PidFile /var/run/opendkim/opendkim.pid

systemctl status opendkim.service我在启动失败后打字时发现了这一点。

输出:

● opendkim.service - LSB: Start and stop OpenDKIM
   Loaded: loaded (/etc/rc.d/init.d/opendkim)
   Active: failed (Result: timeout) since Sat 2016-05-28 20:16:56 CDT; 1min 40s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 2640 ExecStart=/etc/rc.d/init.d/opendkim start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/opendkim.service
           ├─2643 /usr/local/sbin/opendkim -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid
           └─2645 /usr/local/sbin/opendkim -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid

May 28 20:11:56 alpha systemd[1]: Starting LSB: Start and stop OpenDKIM...
May 28 20:11:56 alpha opendkim[2640]: Starting OpenDKIM Milter: [  OK  ]
May 28 20:11:56 alpha systemd[1]: PID file /var/run/opendkim/opendkim.pid not readable (yet?) after start.
May 28 20:11:56 alpha opendkim[2643]: can't write pid to /var/run/opendkim/opendkim.pid: No such file or directory
May 28 20:11:56 alpha opendkim[2645]: OpenDKIM Filter v2.4.2 starting (args: -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid)
May 28 20:16:56 alpha systemd[1]: opendkim.service start operation timed out. Terminating.
May 28 20:16:56 alpha systemd[1]: Failed to start LSB: Start and stop OpenDKIM.
May 28 20:16:56 alpha systemd[1]: Unit opendkim.service entered failed state.
May 28 20:16:56 alpha systemd[1]: opendkim.service failed.

为了解决这个问题,我首先停止了 opendkim 进程:

systemctl stop opendkim

然后我创建了一个在启动时创建目录的服务:

vim /etc/systemd/system/georges.service

内容/etc/systemd/system/georges.service

[Unit]
Description=George's Simple Service
After=network.target

[Service]
Type=simple
ExecStartPre=-/usr/bin/mkdir /var/run/opendkim
ExecStart=/usr/bin/chown opendkim:opendkim /var/run/opendkim
Restart=on-abort


[Install]
WantedBy=multi-user.target

然后我启动了这个服务:

systemctl start georges

systemctl status georges

输出:

[root@alpha etc]# systemctl status georges.service
● georges.service - George's Simple Service
   Loaded: loaded (/etc/systemd/system/georges.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

May 28 20:53:50 alpha systemd[1]: Starting George's Simple Service...
May 28 20:53:50 alpha systemd[1]: Started George's Simple Service.

最后我告诉系统在启动时加载它:

systemctl enable georges

虽然我并不了解我所做的一切,但嘿——它对我有用!如果我这样做破坏了任何东西,请随时告诉我……

更新

我问关于这个的问题他们指出了让系统创建运行目录的正确方法:

创建此文件:

/etc/tmpfiles.d/opendkim.conf

删除以下一行(如果算上注释的话就是 2 行):

#Type Path            Mode UID      GID    Age Argument
 d     /run/opendkim   0755 opendkim opendkim   -   -

轰隆隆——它在重启时也能正常工作,但不需要配置新的服务。

答案2

看起来您已经至少有一个 OpenDKIM 进程正在运行,这阻止它启动新进程。使用 ps aux | grep opendkim 终止您找到的所有进程,然后重新启动 OpenDKIM。

答案3

dkim-filter.conf 中有一个“AutoRestart”选项,这意味着如果使用“service dkim-milter stop”关闭服务,它将自动重新启动。但是,如果您尝试使用“service dkim-milter start”手动启动服务,它似乎会创建第二个进程,并且服务器日志开始充满错误消息,因为端口正在使用中。

我有一个脚本可以手动检查我的邮件服务器进程并使用停止/启动方法重新启动它们,但遇到了这个问题。

使用“service dkim-milter restart”似乎效果更好,但偶尔我会遇到问题。

答案4

语法,只需在 DKIM-MILTER.CONF 上将 Socket 重命名为 SOCKET

相关内容