我使用一个init脚本来运行一个简单的进程,该进程从以下命令开始:
start-stop-daemon --start --quiet --chuid $DAEMONUSER \
--make-pidfile --pidfile $PIDFILE --background \
--exec $DAEMON $DAEMON_ARGS
名为$DAEMON的进程通常将日志信息打印到其标准输出。据我所知,这些数据没有存储在任何地方。
我想要将$DAEMON的标准输出写入或附加到某个文件中。
我所知道的惟一解决方案是告诉启动-停止-守护进程调用$DAEMON脚本,而不是直接调用stop;然后该脚本调用stop并写入日志文件。但这需要一个额外的脚本,就像修改守护进程本身一样,这似乎不是解决这种常见任务的错误方法。
发布于 2014-01-10 04:00:09
对ypocat的回答进行扩展,因为它不让我发表评论:
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进程并忽略运行该守护进程的实际子进程。
发布于 2012-10-01 00:29:39
您需要做的是:
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/
。
发布于 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“
https://stackoverflow.com/questions/8251933
复制相似问题