我运行 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
无论如何。
进一步阅读
- https://unix.stackexchange.com/a/233581/5132
- 乔纳森·德博因·波拉德 (2014)。并排查看运行脚本和服务单元。。经常给出的答案。
- 乔纳森·德博因·波拉德 (2014)。 ”不要假设“前台”意味着“调试模式”。'。 设计 Unix 守护程序时要避免的错误。经常给出的答案。