/var/log/<service-name> (sysvinit) 中服务的日志输出

时间:2021-07-02 13:01:12

标签: init busybox init.d start-stop-daemon

我有一个 init.d 脚本,它将二进制文件作为守护进程运行。二进制文件定期将状态行写入标准输出。我想将这些行记录到 /var/log/my-daemon 中。

当启动代码是这样的:

start-stop-daemon -S -x $DAEMON -- $ARGS

然后我运行 service my-daemon restart,然后我在...标准输出上得到日志输出。但显然,我想在后台运行它,并将日志保存到文件中。

我想要这样的东西(灵感来自this):

start-stop-daemon -S --background -x $DAEMON -- $ARGS >> /var/log/my-daemon 2>&1

但这不会将任何内容记录到日志文件中。从 start-stop-daemon 的手册页中,听起来 --no-close 在这里使用是正确的。但我的系统使用来自 Busybox 的 start-stop-daemon

BusyBox v1.32.0 () multi-call binary.

Usage: start-stop-daemon [OPTIONS] [-S|-K] ... [-- ARGS...]

似乎不支持 -C--no-close

是否有解决方案,或者我是否需要更改我的初始化系统,因为我将无法使用 Busybox 实现我想要的?

注意:以下似乎有效(至少有时),但感觉不对(否则就不需要 --background,对吗?):

start-stop-daemon -S -x $DAEMON -- $ARGS >> /var/log/my-daemon 2>&1 &

1 个答案:

答案 0 :(得分:1)

您是否考虑过在二进制进程中使用 syslog(3)?这在 *NIX 发行版中是相当标准的,而且也相当容易使用。 “背景化”进程的重点是(除其他外)将进程与控制台分离,因此它将死胡同 stdinstderrstdout -- 但如果您选择重定向到 init 脚本中的文件,它当然会将输出发送到重定向的文件。通过使用 syslogd 来路由您的消息,您可以在不修改初始化脚本或传递特殊参数的情况下对其进行配置。您还将获得详细级别的好处。如果您希望将输出同时发送到日志和控制台,您也可以很容易地将 syslog() 包装起来。

相关问题