进一步阅读

进一步阅读

在配置 postfix 和 opendkim 的过程中,我决定升级 Debian jessie (oldstable) 以进行扩展。从那时起,我就无法让 opendkim 正常启动。

我期望的是 /etc/default/opendkim 中的配置应该得到尊重,特别是 RUNDIR 和 SOCKET 设置应该放在后缀 chroot 中:

# Command-line options specified here will override the contents of
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.
#DAEMON_OPTS=""
# Change to /var/spool/postfix/var/run/opendkim to use a Unix socket with
# postfix in a chroot:
RUNDIR=/var/spool/postfix/var/run/opendkim
# Uncomment to specify an alternate socket
# Note that setting this will override any Socket value in opendkim.conf
SOCKET=local:$RUNDIR/opendkim.sock
USER=opendkim
GROUP=opendkim
PIDFILE=$RUNDIR/$NAME.pid
EXTRAAFTER=

但是,无论我重新启动,执行“service opendkim start”还是“/etc/init.d/opendkim start”,/var/run/opendkim都会被用作RUNDIR,因此pid文件和​​套接字都放在错误的位置:

/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock

我读到这是因为 /etc/init.d/opendkim 文件(与所有其他 debian init 文件一样)包含位于 /lib/lsb/init-functions 的 LSB init 函数,该函数在 /lib 运行 systemd 脚本/lsb/init-functions.d/40-systemd,这又将执行重定向为“systemctl start opendkim”

这意味着读取 /etc/systemd/system/multi-user.target.wants/opendkim.service 中的单元文件,并执行其中的 ExecStart 行

我还读到,我可以通过在包含 lsb init 函数之前设置环境变量 _SYSTEMCTL_SKIP_REDIRECT 来跳过 systemctl 重定向。

我现在配置 opendkim 的正确方法是什么?

A。我还应该编辑 /etc/default/opendkim 并将 _SYSTEMCTL_SKIP_REDIRECT 添加到 /etc/init.d/opendkim 吗?

b. /etc/systemd/system/multi-user.target.wants/opendkim.service 中的 systemctl 单元文件是如何生成的,它是否应该足够智能以包含我的配置?即我没有做错什么吗?

C。或者我应该直接编辑 ExecStart 行?

答案1

以上都不是。

  • 不要胡思乱想_SYSTEMCTL_SKIP_REDIRECT。这是一个内部机制,不关你的事。
  • 单元文件不在该位置。这是一个符号链接。 systemd 单元文件是/lib/systemd/system/opendkim.service.
  • 不要编辑 systemd 单元文件。它由 Debian 的 OpenDKIM 软件包提供,不应进行修改。
  • 一般来说,一个很好的经验法则是,错误的答案作为对问题的评论将是糟糕的建议。它就在这里。

OpenDKIM 人们提供opendkim.servicesystemd 的文件。它面向 RedHat 及其/etc/sysconfig系统,而不是面向 Debian 及其系统,因此根本/etc/default没有注意到。/etc/default/opendkim

Debian 人并没有修复它,而是提供了其他 opendkim.service系统文件它用于代替 Debian 软件包中 OpenDKIM 提供的版本。该服务单元不读取 或/etc/sysconfig/opendkim,并且硬连线OpenDKIM 使用的套接字/etc/default/opendkim的位置。AF_LOCAL这就是人们所得到的/lib/systemd/system/opendkim.service

/lib/systemd/system/opendkim.service因此,人们可能会认为有人在编辑。一个则不然。 systemd 规则是不编辑软件包提供的服务单元文件/lib/systemd。 systemd 修改此服务的方法是在/etc/systemd/system/opendkim.service.d/目录中添加覆盖 INI 文件。其中包含要覆盖的包提供的服务单元部分的片段。

因此,人们可能会认为只需创建这样一个片段即可。一个则不然。 Debian 人提供了名为的“生成器”程序opendkim.service.generate它会根据文件的内容自动创建这样的代码片段/etc/default/opendkim,并根据需要覆盖UserGroup和。ExecStart

问题是 Debian 的人们没有正确地将这个生成器连接到 systemd 中。这其实不是一个系统生成器,它具有特定的形式并具有该程序所没有的特定类型的输出。它也没有与 Debian 软件包安装和删除过程挂钩。您需要/lib/opendkim/opendkim.service.generate手动运行,然后是显式的systemctl daemon-reload.

进一步阅读

相关内容