如何从 Linux init.d/rc.d 脚本中查找错误消息?

如何从 Linux init.d/rc.d 脚本中查找错误消息?

在 Linux 中,我编写了一些在启动时执行的脚本,并尝试了各种安装方法。对于较大的脚本,我会将其放入/etc/init.d并链接适当的/etc/rc.d/rc?.d运行级别。对于较小的脚本,我会将其附加到/etc/rc.d/rc.local。这个过程似乎运行得很顺利。

现在我调整了我的一个脚本,但它失败了。我花了很长时间来诊断它,因为我似乎无法捕获错误输出。我检查/var/log/messages并研究了其余部分/var/log,但找不到任何有用的东西。

有人知道吗:

  1. 这些错误信息会被自动捕获到某个地方吗?
  2. 如果没有,我该如何从我的 init.d 脚本中捕获 stdout/stderr?

提前致谢。

答案1

  1. 不 - 他们去标准输出(如果您使用echo)或标准错误(如果您使用echo >&2)。

  2. 你的脚本必须自己写入日志和/或系统日志(你的发行版可能包含一些初始化文件可能有帮助的功能-将您的分布添加到您的问题中)。

如果您要查看日志,请查找tee命令。如果您要查看 syslog,请查找logger。您可以以任何您想要的方式组合它们。

答案2

编写一个包装脚本,调用你的脚本并将输出重定向到文件

#!/bin/bash

    /path/to/your/script &>/path/to/logfile

答案3

您可以创建一个函数将消息回显到屏幕和系统日志,如下所示:

LOGGER="/usr/bin/logger -t $myScript"    # check the location of logger for your system

myEcho () {
    echo "$1"
    $LOGGER "$1"
}

您还可以将其放入单独的文件中,然后将其包含到脚本中

#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho

答案4

来自 init 脚本的消息通常不会在任何地方被捕获。因此,您需要自己实现一种方法来执行此操作。一个好主意是使用logger将所有输出发送到 syslog。此示例将 stdout 和 stderr 发送到 syslog:

exec 1> >(logger -s -t $(basename $0)) 2>&1

我在这篇很棒的文章中找到了它:http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/

相关内容