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