Bin*_*gme 4 debian systemd sysvinit
在我配置 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=
Run Code Online (Sandbox Code Playgroud)
但是,无论我是否重新启动,执行“service opendkim start”或“/etc/init.d/opendkim start”,/var/run/opendkim 都被用作RUNDIR,因此pid 文件和socket 被放置在错误的位置:
/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock
Run Code Online (Sandbox Code Playgroud)
我读到这是因为 /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 函数之前设置 env 变量 _SYSTEMCTL_SKIP_REDIRECT 来跳过 systemctl 重定向。
我现在配置 opendkim 的正确方法是什么?
一种。我还应该编辑 /etc/default/opendkim 并将 _SYSTEMCTL_SKIP_REDIRECT 添加到 /etc/init.d/opendkim 吗?
湾 /etc/systemd/system/multi-user.target.wants/opendkim.service 中的 systemctl 单元文件是如何生成的,它是否应该足够智能以包含我的配置?即我没有错吗?
C。还是应该直接编辑 ExecStart 行?
以上都不是。
_SYSTEMCTL_SKIP_REDIRECT。这是一种与您无关的内部机制。/lib/systemd/system/opendkim.service.OpenDKIM 人员为 systemd提供了一个opendkim.service文件。它是针对 RedHat 及其/etc/sysconfig系统,而不是针对 Debian 及其/etc/default系统的,因此完全没有注意到/etc/default/opendkim。
Debian 人员没有修复它,而是为 systemd提供了另一个 opendkim.service文件,用于代替 Debian 软件包中 OpenDKIM 提供的文件。该服务单位不读取这两种/etc/sysconfig/opendkim或/etc/default/opendkim与硬线的位置AF_LOCAL套接字OpenDKIM用途。这就是一个人得到的/lib/systemd/system/opendkim.service。
人们可能会认为 1 编辑/lib/systemd/system/opendkim.service,因此。一个没有。systemd 规则是不编辑包提供的服务单元文件/lib/systemd. systemd 修改此服务的方式是在/etc/systemd/system/opendkim.service.d/目录中添加一个覆盖 INI 文件。这包含要覆盖的包提供的服务单元部分的片段。
因此,人们可能会认为只是创建了这样一个片段。一个没有。Debian的人提供了一个名为“发电机”程序opendkim.service.generate,可以自动从内容创建这样一个片段/etc/default/opendkim文件,重写User,Group和ExecStart适当的。
问题是 Debian 人员没有将这个生成器正确连接到 systemd。它并不是真正的systemd生成器,它具有特定的形式并具有该程序所没有的特定类型的输出。它也不与 Debian 软件包安装和删除过程挂钩。您需要/lib/opendkim/opendkim.service.generate手动运行,然后是显式的systemctl daemon-reload.
| 归档时间: |
|
| 查看次数: |
903 次 |
| 最近记录: |