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


28

在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?

提前致谢。



如果您使用systemd使用更现代的发行版,它将为您处理,并允许记录每个服务的日志消息。
eckes

Answers:


17
  1. 否-他们进入STDOUT(如果使用echo)或STDERR(如果使用echo >&2)。

  2. 您的脚本必须自己编写日志和/或syslog(您的发行版可能包含一些init.d函数,可能会对您有所帮助-将发行版添加到问题中)。

如果您要查找日志,请查找tee命令。如果您要使用syslog,请参阅logger。您可以按照需要的任何方式组合它们。



6

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

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

谢谢,这接近我想要的东西。我知道如何重定向I / O,但我不知道如何调用记录器。
McKAMEY 2011年

是否[ -r ... ]进行测试以检查其是否存在?
McKAMEY 2011年

是的,请检查文件是否可读。
ott-- 2011年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.