如何使用 start-stop-daemon(8) 重定向守护进程的 stdout 和 stderr?

如何使用 start-stop-daemon(8) 重定向守护进程的 stdout 和 stderr?

我运行 Debian 8 jessie。

我已激活守护程序的调试工具,这会导致守护程序将调试信息打印到 stdout 和/或 stderr。我如何说服start-stop-daemon(8)/lib/lsb/init-functions守护程序的 stdout 和 stderr 重定向到我的调试日志文件/root/log

看来>/root/log 2>&1是无效的。我认为这是有道理的,因为start-stop-daemon(8)它不是一个外壳。无论如何,我该如何重定向守护进程的标准输出和标准错误?

[守护进程恰好是exim4(8),但据我所知,这与我的问题无关。 LSB 显然将守护进程的管理委托给了 Systemd;这可能与我所知道的一切间接相关。]

答案1

在 systemd Linux 操作系统上尝试通过 shell 脚本的各个层传递魔法选项是完全错误的方法。

系统已经记录由“sysv”服务生成器自动生成的服务的标准输出/错误,如下所示。 “sysv”服务生成器已经创建了一个exim4.service(在 下的某个位置/run/systemd)来调用您的/etc/init.d/exim4服务。

没有代表团在进行。您的rc脚本首先并不负责该服务。它们只是作为方便的代理运行。

因此,您需要做的是查看已捕获的服务日志输出exim4.service。这可以是在日记中,也可以是syslog您安排的以日记为基础的任何变体。

对于后者,请执行适合您的syslog变体的任何操作。对于前者,请注意,systemctl每当您运行时,都会显示该服务的最新日志条目

systemctl 状态 exim4.service
具有适当的权限(超级用户或systemd-journal组的成员身份)。您还可以查看自上次引导以来服务的日志条目(日志尚未轮换)

Journalctl -u exim4.service -e -b

进出口银行实行适当的服务管理

讽刺的是,所有这些怪物脚本都可以用一些相当短的、+和+服务和套接字单元rc来替换。exim4-queue.service[email protected]exim4-smtp-relay.socket[email protected]exim4-smtp-submission.socket

另请注意,exim 将“前台”和“调试”/“详细”混为一谈是错误的。它的-bdf选项明确是非“守护进程”版本-bd,尽管要将其作为每个连接的“套接字激活”守护进程(根据进一步阅读中的示例)调用,其中服务管理工具处理侦听套接字,人们会使用-bs而不是-bdf无论如何。

进一步阅读

相关内容