lsb - log_daemon_msg 在 shell 控制台中回显消息!

lsb - log_daemon_msg 在 shell 控制台中回显消息!
#!/bin/sh
. /lib/lsb/init-functions
log_daemon_msg "this is a daemon s message"

在 shell 控制台上,它打印,

this is a daemon s message

守护进程根本没有标准输出。那么为什么daemon startup脚本要写入呢stdout?他们不应该使用syslog文件吗?如何将 init 日志重定向到系统日志文件,以便调试启动时间问题?我使用的是 Ubuntu 14.04。

答案1

守护进程根本没有标准输出。

不对。如果某个守护进程由 daemontools 系列工具集之一管理(https://unix.stackexchange.com/a/179798/5132),那么守护进程将继承一个开放的标准输出文件描述符,用于将其连接到日志记录服务的管道。如果使用 systemd,那么(在默认配置中)守护进程将继承一个开放标准输出文件描述符,用于将其连接到 systemd 日志服务的套接字。

无论如何,您都在混淆init.d脚本,其中管理守护进程,以及守护进程本身。对于 System Vrc和 systemd,init.d脚本仅导致守护进程本身的启动和停止。 (在 System Vrc情况下,它使用诸如 之类的帮助程序来完成此操作start-stop-daemon。在 systemd 情况下,它用于systemctl通过 D-Bus RPC 发送命令来处理#1。)它不是守护进程本身。

守护进程的标准输出不一定与init.d脚本的标准输出有任何关系。您正在使用的是后者的标准输出log_daemon_msg。此 shell 函数及其相关函数打印友好消息来自守护进程管理脚本,显示管理脚本在尝试执行守护进程控制命令时正在执行的操作。它们没有被使用在守护进程本身

讽刺的是,由于守护进程管理的方式与 systemd 不同,因此所有log_daemon_msg命令都变得无关紧要,因为任何源管理脚本/lib/lsb/init-functions最终都会将所有控制命令转移到systemctl.

如何将 init 日志重定向到系统日志文件,以便调试启动时间问题?

你有一个任务。您已经确定该任务的子任务可以通过某种方式解决log_daemon_msg,并且在这里您询问如何去做log_daemon_msg一些它不是设计要做的事情。专注于你的真实的问题。

Ubuntu 14.04使用upstart。它有一个新贵作业,通过在运行级别事件发生时实际运行 System V/etc/init/rc.conf来提供与 System V 的向后兼容性。这个工作是rcrc列于新贵食谱正如你所看到的用途console output

正如你可以看到食谱,以及 upstart — 守护进程(默认情况下)继承一个开放的标准输出文件描述符,该描述符连接到 upstart 的每作业日志记录机制。再一次,守护进程“没有标准输出”的观念是错误的。该/etc/init/rc.conf作业使用(非默认)选项将标准输出连接到控制台。当然,这也会重定向 System V 生成的各种守护进程管理脚本的输出rc

因此,如果您想在其他地方记录作业的输出/etc/init/rc.conf以及它生成的所有 System V 管理脚本,请修改该作业规范。

如果您想调试启动时问题,请使用以下机制中描述的新贵食谱(以及 AskUbuntu Stack Exchange 上的几个答案)用于启动时调试。

进一步阅读

相关内容