Opendkim 无法启动:无法打开 PID 文件?

Opendkim 无法启动:无法打开 PID 文件?

这是我从 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

答案1

PidFile我通过在文件中指定来修复它/etc/opendkim.conf

PidFile                 /var/run/opendkim/opendkim.pid

我认为在这里解决这个问题比修改 systemd 脚本更好。另外,PIDFile如果选项设置Typeforking,它似乎就在这个服务中。

PidFile设置存在于默认/etc/opendkim.conf文件中。但是,我在按照教程配置 OpenDKIM 时替换了该文件。所以这就是我出错的地方。

答案2

由于此守护进程单独运行,systemd 不需要任何特殊的东西来管理它。重要的是,拥有“PIDFile”指令表明它是一项更复杂的服务,并且会自行将 PID 放入 PIDFile 中。

解决方案是删除 PIDFile 行。现在 systemd 可以很好地处理它。

答案3

在我的情况下,这是由于 是 的/var/run符号链接。将中的路径/run更改为 后,问题就消失了。PIDFile/var/run/opendkim/opendkim.pid/run/opendkim/opendkim.pidopendkim.service

答案4

我通过如下编辑 systemctl 文件解决了这个问题:

nano /etc/systemd/system/multi-user.target.wants/opendkim.service

[Service]
PIDFile=/var/run/opendkim/opendkim.pid
ExecStartPost=/bin/sh -c 'chown opendkim:opendkim /var/run/opendkim/opendkim.pid'

它会在启动服务之前为 opendkim.pid 文件设置正确的权限。这就是 opendkim 说“没有这样的文件或目录”的原因。该文件不适用于 opendkim 服务。

相关内容