我刚刚将系统从 14.04 升级到 16.04,除其他问题外,opendkim 不再正确启动。我有以下内容/var/log/syslog
:
Sep 19 18:27:58 aurora systemd[1]: Starting DomainKeys Identified Mail (DKIM) Milter...
Sep 19 18:27:59 aurora opendkim[28496]: opendkim: usage: opendkim -p socketfile [options]
Sep 19 18:27:59 aurora opendkim[28496]: #011-A #011auto-restart
Sep 19 18:27:59 aurora opendkim[28496]: #011-b modes #011select operating modes
Sep 19 18:27:59 aurora opendkim[28496]: #011-c canon #011canonicalization to use when signing
Sep 19 18:27:59 aurora opendkim[28496]: #011-d domlist #011domains to sign
Sep 19 18:27:59 aurora opendkim[28496]: #011-D #011also sign subdomains
Sep 19 18:27:59 aurora opendkim[28496]: #011-e name #011extract configuration value and exit
Sep 19 18:27:59 aurora opendkim[28496]: #011-f #011don't fork-and-exit
Sep 19 18:27:59 aurora opendkim[28496]: #011-F time #011fixed timestamp to use when signing (test mode only)
Sep 19 18:27:59 aurora opendkim[28496]: #011-k keyfile #011location of secret key file
Sep 19 18:27:59 aurora opendkim[28496]: #011-l #011log activity to system log
Sep 19 18:27:59 aurora opendkim[28496]: #011-L limit #011signature limit requirements
Sep 19 18:27:59 aurora opendkim[28496]: #011-n #011check configuration and exit
Sep 19 18:27:59 aurora opendkim[28496]: #011-o hdrlist #011list of headers to omit from signing
Sep 19 18:27:59 aurora opendkim[28496]: #011-P pidfile #011file into which to write process ID
Sep 19 18:27:59 aurora opendkim[28496]: #011-q #011quarantine messages that fail to verify
Sep 19 18:27:59 aurora opendkim[28496]: #011-Q #011query test mode
Sep 19 18:27:59 aurora opendkim[28496]: #011-r #011require basic RFC5322 header compliance
Sep 19 18:27:59 aurora opendkim[28496]: #011-s selector #011selector to use when signing
Sep 19 18:27:59 aurora opendkim[28496]: #011-S signalg #011signature algorithm to use when signing
Sep 19 18:27:59 aurora opendkim[28496]: #011-t testfile #011evaluate RFC5322 message in "testfile"
Sep 19 18:27:59 aurora opendkim[28496]: #011-T timeout #011DNS timeout (seconds)
Sep 19 18:27:59 aurora opendkim[28496]: #011-u userid #011change to specified userid
Sep 19 18:27:59 aurora opendkim[28496]: #011-v #011increase verbosity during testing
Sep 19 18:27:59 aurora opendkim[28496]: #011-V #011print version number and terminate
Sep 19 18:27:59 aurora opendkim[28496]: #011-W #011"why?!" mode (log sign/verify decision logic)
Sep 19 18:27:59 aurora opendkim[28496]: #011-x conffile #011read configuration from conffile
Sep 19 18:27:59 aurora systemd[1]: opendkim.service: Control process exited, code=exited status=64
Sep 19 18:27:59 aurora systemd[1]: Failed to start DomainKeys Identified Mail (DKIM) Milter.
Sep 19 18:27:59 aurora systemd[1]: opendkim.service: Unit entered failed state.
Sep 19 18:27:59 aurora systemd[1]: opendkim.service: Failed with result 'exit-code'.
Run Code Online (Sandbox Code Playgroud)
似乎opendkim
正在获取无效的命令行参数。如何找出正在使用的命令行,以及它是如何构建的?
跟踪/etc/init.d/opendkim start
没有帮助,因为这只是调用 /bin/systemctl --no-pager start opendkim.service
. 环顾四周,我发现/lib/systemd/system/opendkim.service
其中包含该行
ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p $SOCKET $DAEMON_OPTS
Run Code Online (Sandbox Code Playgroud)
在 中/etc/default/opendkim
,我们有SOCKET="inet:8891@localhost"
并DAEMON_OPTS
没有设置。但是,如果我手动运行
/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p inet:8891@localhost
Run Code Online (Sandbox Code Playgroud)
它成功了。显然,这不是正在使用的命令行。
按照 muru 的评论,这里是systemctl -l status opendkim.service
.
? opendkim.service - DomainKeys Identified Mail (DKIM) Milter
Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2016-09-19 18:27:59 UTC; 23min ago
Docs: man:opendkim(8)
man:opendkim.conf(5)
man:opendkim-genkey(8)
man:opendkim-genzone(8)
man:opendkim-testadsp(8)
man:opendkim-testkey
http://www.opendkim.org/docs.html
Process: 28496 ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p $SOCKET $DAEMON_OPTS (code=exited, status=64)
Process: 28488 ExecStartPre=/bin/chown opendkim.opendkim /var/run/opendkim (code=exited, status=0/SUCCESS)
Process: 28485 ExecStartPre=/bin/mkdir -p /var/run/opendkim (code=exited, status=0/SUCCESS)
Sep 19 18:27:59 aurora opendkim[28496]: -T timeout DNS timeout (seconds)
Sep 19 18:27:59 aurora opendkim[28496]: -u userid change to specified userid
Sep 19 18:27:59 aurora opendkim[28496]: -v increase verbosity during testing
Sep 19 18:27:59 aurora opendkim[28496]: -V print version number and terminate
Sep 19 18:27:59 aurora opendkim[28496]: -W "why?!" mode (log sign/verify decision logic)
Sep 19 18:27:59 aurora opendkim[28496]: -x conffile read configuration from conffile
Sep 19 18:27:59 aurora systemd[1]: opendkim.service: Control process exited, code=exited status=64
Sep 19 18:27:59 aurora systemd[1]: Failed to start DomainKeys Identified Mail (DKIM) Milter.
Sep 19 18:27:59 aurora systemd[1]: opendkim.service: Unit entered failed state.
Sep 19 18:27:59 aurora systemd[1]: opendkim.service: Failed with result 'exit-code'.
Run Code Online (Sandbox Code Playgroud)
该ExecStart
行与文件中的一样。是否有可能从字面上传递字符串$SOCKET
而不是该变量的内容?
我想到了。我尝试用/usr/sbin/opendkim
记录其命令行的脚本替换,并看到它正在获取
-x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p inet:8891@localhost# listen on loopback on port 12345
Run Code Online (Sandbox Code Playgroud)
行尾有一条评论/etc/default/opendkim
,显然没有正确解析。
我将该评论移到了它自己的行中,现在它可以工作了。
归档时间: |
|
查看次数: |
1184 次 |
最近记录: |