首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何记录start-stop-daemon启动的进程的stdout?

如何记录start-stop-daemon启动的进程的stdout?
EN

Stack Overflow用户
提问于 2011-11-24 11:33:25
回答 5查看 101.7K关注 0票数 124

我使用一个init脚本来运行一个简单的进程,该进程从以下命令开始:

代码语言:javascript
复制
start-stop-daemon --start --quiet --chuid $DAEMONUSER    \
    --make-pidfile --pidfile $PIDFILE --background       \
    --exec $DAEMON $DAEMON_ARGS

名为$DAEMON的进程通常将日志信息打印到其标准输出。据我所知,这些数据没有存储在任何地方。

我想要将$DAEMON的标准输出写入或附加到某个文件中。

我所知道的惟一解决方案是告诉启动-停止-守护进程调用$DAEMON脚本,而不是直接调用stop;然后该脚本调用stop并写入日志文件。但这需要一个额外的脚本,就像修改守护进程本身一样,这似乎不是解决这种常见任务的错误方法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-01-10 04:00:09

对ypocat的回答进行扩展,因为它不让我发表评论:

代码语言:javascript
复制
start-stop-daemon --start --quiet --chuid $DAEMONUSER    \
 --make-pidfile --pidfile $PIDFILE --background       \
 --startas /bin/bash -- -c "exec $DAEMON $DAEMON_ARGS > /var/log/some.log 2>&1"

使用exec运行守护进程允许stop正确地停止子进程,而不仅仅是bash父进程。

使用--startas而不是--exec可以确保进程能够被其pid正确检测到,并且如果多次调用start,也不会错误地启动守护进程的多个实例。否则,start-stop-daemon将查找/bin/bash进程并忽略运行该守护进程的实际子进程。

票数 133
EN

Stack Overflow用户

发布于 2012-10-01 00:29:39

您需要做的是:

代码语言:javascript
复制
start-stop-daemon --start --quiet --chuid $DAEMONUSER    \
    --make-pidfile --pidfile $PIDFILE --background       \
    --exec /bin/bash -- -c "$DAEMON $DAEMON_ARGS > /var/log/some.log 2>&1"

另外,如果您使用--chuid--user,请确保用户可以写入/var/log或现有的/var/log/some.log。不过,最好的方法是让该用户拥有一个/var/log/subdir/

票数 47
EN

Stack Overflow用户

发布于 2013-01-22 04:45:41

我不确定"$DAEMON $DAEMON_ARGS >/var/2>&1/ome.log 2>&1“是否会关闭日志文件的文件描述符...这意味着如果您的守护进程永远运行,我不确定logrotate或其他清理磁盘空间的机制是否有效。因为它是>而不是>>,所以建议的命令还会在重启时截断现有日志。如果您想了解守护进程崩溃并自动重新启动的原因,这可能没有太大帮助。

另一个选项可能是"$DAEMON | logger“。logger是一个将记录到syslog (/var/ log /messages)的命令。如果你也需要stderr,我想你可以使用"$DAEMON 1>&2 | logger“

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8251933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档