McK*_*MEY 30 linux logging rc.d init.d
在 Linux 中,我编写了一些要在引导期间执行的脚本,并尝试了各种安装它们的方法。对于较大的脚本,我将放入/etc/init.d并链接适当的/etc/rc.d/rc?.d运行级别。对于较小的脚本,我将附加到/etc/rc.d/rc.local. 这个过程似乎很顺利。
现在我已经调整了我的一个脚本,但它失败了。我花了很长时间来诊断它,因为我似乎无法捕获错误输出。我已经检查/var/log/messages并浏览了其余部分,/var/log但找不到任何有用的东西。
有人知道吗:
提前致谢。
Nil*_*ils 18
不 - 他们去STDOUT(如果你使用echo)或STDERR(如果你使用echo >&2)。
您的脚本必须自己写入日志和/或 syslog(您的发行版可能包含一些可能有帮助的init.d函数 - 将您的发行版添加到您的问题中)。
如果您查找日志,请查找tee命令。如果您查看 syslog,请查看logger. 你可以以任何你想要的方式组合它们。
编写一个包装脚本,调用您的脚本并将输出重定向到文件
#!/bin/bash
/path/to/your/script &>/path/to/logfile
Run Code Online (Sandbox Code Playgroud)
您可以创建一个函数将消息回显到屏幕和系统日志,如下所示:
LOGGER="/usr/bin/logger -t $myScript" # check the location of logger for your system
myEcho () {
echo "$1"
$LOGGER "$1"
}
Run Code Online (Sandbox Code Playgroud)
您也可以将其放入一个单独的文件中,并将其包含在您的脚本中
#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho
Run Code Online (Sandbox Code Playgroud)
小智 6
来自 init 脚本的消息通常不会在任何地方捕获。因此,您需要自己实现一种方法。一个好主意是使用logger将所有输出发送到系统日志。此示例将 stdout 和 stderr 发送到 syslog:
exec 1> >(logger -s -t $(basename $0)) 2>&1
Run Code Online (Sandbox Code Playgroud)
我在这篇很棒的文章中找到了它:http : //urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/。
| 归档时间: |
|
| 查看次数: |
113305 次 |
| 最近记录: |