2

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

当开始代码是这样的:

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

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

我想要这样的东西(受此启发

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

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

BusyBox v1.32.0 () multi-call binary.

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

哪个似乎不支持-Cor --no-close

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

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

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

1 回答 1

1

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

于 2021-07-12T20:43:05.987 回答