这是我从 systemd 收到的投诉:
"opendkim.service: Can't open PID file /var/run/opendkim/opendkim.pid"
如此处所示:
systemctl status opendkim.service
提出这个:
● opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter
Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)
Active: deactivating (stop-sigterm) (Result: timeout)
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: 8217 ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf (code=exited, status=0/SUCCESS)
Tasks: 6 (limit: 2361)
CGroup: /system.slice/opendkim.service
└─8226 /usr/sbin/opendkim -x /etc/opendkim.conf
Feb 11 04:56:48 hacksaw.org systemd[1]: Starting OpenDKIM DomainKeys Identified Mail (DKIM) Milter...
Feb 11 04:56:48 hacksaw.org systemd[1]: opendkim.service: Can't open PID file /var/run/opendkim/opendkim.pid (yet?) after start: No such file or directory
Feb 11 04:56:48 hacksaw.org opendkim[8226]: OpenDKIM Filter v2.11.0 starting (args: -x /etc/opendkim.conf)
Feb 11 04:58:18 hacksaw.org systemd[1]: opendkim.service: Start operation timed out. Terminating.
如果我手动启动守护进程,它就会运行。这似乎与systemd有关。
其他数据:
#ls -ld /var/run/opendkim/
drwxr-xr-x 2 opendkim opendkim 40 Feb 11 04:25 /var/run/opendkim/
opendkim.conf 中唯一的一行:
UserID opendkim:opendkim
默认的 opendkim 服务文件,来自 /lib/systemd/service:
[Unit]
Description=OpenDKIM DomainKeys Identified Mail (DKIM) Milter
Documentation=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
After=network.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/opendkim/opendkim.pid
UMask=0007
ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf
Restart=on-failure
ExecReload=/bin/kill -USR1 $MAINPID
[Install]
WantedBy=multi-user.target
PidFile
我通过在/etc/opendkim.conf
文件中指定来修复它:我认为在这里解决它比修改systemd脚本更好。此外,如果选项设置为, systemd 会推荐该
PIDFile
Type
forking
选项,它似乎在此服务中。此
PidFile
设置存在于默认/etc/opendkim.conf
文件中。但是,我在遵循配置 OpenDKIM 的教程时替换了该文件。所以这就是我出错的地方。由于这个守护进程单独运行,systemd 不需要任何特殊的东西来管理它。重要的是,有一个“PIDFile”指令表明它是一个更复杂的服务,并且会将 PID 放入它自己的 PIDFile 中。
解决方案是删除 PIDFile 行。现在 systemd 处理得很好。
在我的情况下,这是因为这
/var/run
是一个符号链接到/run
. 从in更改PIDFile
路径后,问题就消失了。/var/run/opendkim/opendkim.pid
/run/opendkim/opendkim.pid
opendkim.service
在这里编辑这个文件对我有用。
通过更改
PidFile /var/run/opendkim/opendkim.pid
为我的平台是centos 7
我通过像这样编辑 systemctl 文件解决了这个问题:
它将在启动服务之前为 opendkim.pid 文件设置正确的权限。这就是为什么 opendkim 说“没有这样的文件或目录”的原因。该文件不可用于 opendkim 服务。
我只是通过
opendkim
在其中创建文件夹/var/run/
并将其更改为 opendkim:opendkim 来解决此问题。之后,服务正确启动并创建了它的 pid 文件。