【问题标题】:Log output from service in /var/log/<service-name> (sysvinit)/var/log/<service-name> (sysvinit) 中服务的日志输出
【发布时间】:2021-09-14 10:29:31
【问题描述】:

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

当开始代码是这样的:

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

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

我想要这样的东西(灵感来自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 &

【问题讨论】:

  • $DAEMON 本身呢。那是你可以控制的吗?你可以让它写入日志文件而不是 STDOUT 可能

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多