我创建了一个 bash 脚本“foo”。我已经使该脚本可执行
chmod+x
并通过运行将其添加到启动中
sudo update-rc.d foo defaults 80
尽管如此,它似乎并没有在启动时工作。有没有办法让我的脚本将消息回显到日志?或者是否有一些日志可以记录事件/错误?
自动取款机,我觉得我在瞎飞,真的不知道如何解决这个问题。
根据要求,这是我的脚本的内容:
#!/bin/bash
modprobe uinput
/home/dane/dev/mangler/run.sh /home/dane/dev/mangler/dane/keys.js
run.sh 命令执行程序 kbd-mangler.exe。在 gnome-terminal 中运行以下命令时,它可以工作:
~/$ sudo bash custom_keys.sh
看一下
logger
命令。在脚本的开头添加这样的一行:
添加一条简单的消息,以
/var/log/syslog
表明您的脚本正在执行某些操作。如果您使用 sudo 运行该脚本,它是否有效?如果脚本设置正确,我见过的最常见错误与未正确设置环境有关。
例如,在脚本开头显式设置 PATH 或对运行的任何命令使用完整路径是一种很好的做法。
80也是你真正需要的水平吗?您是否依赖尚未开始的事情?
您的脚本是否充分检查您运行的事物的错误级别,然后做出适当的响应。良好的脚本和编程要求您正确地观察和处理错误。
将一些
echo status
语句放入您的脚本中,并在系统启动时仔细观察。使用记录器会有所帮助,因为您可以将输出发送到系统日志。您可以将 a 添加
set -x
到脚本的第一行,并将 a添加到sleep 120
最后一行,然后注意错误。这基本上会在您的屏幕上执行每条语句,然后等待几分钟,以便您有机会阅读和识别问题。只是为了补充建议的内容。
我还将验证符号链接 /etc/rc2.d/S80foo 是否已创建并正确链接。如果文件 foo 不存在,update-rc.d 应该会给你一个错误,但仔细检查并没有什么坏处。
在脚本的开头,添加以下行:
重启。现在看看 /tmp 中的那个文件——它应该告诉你发生了什么。
顺便说一句,在 init.d 脚本中,我倾向于使用带有完整路径 (/sbin/modprobe) 的命令。我已经被这些脚本使用的受限 PATH 烧毁了很多次,我现在不做任何假设。:)
顺便说一句,好的 Bash 编程链接:
http://mywiki.wooledge.org/BashFAQ
http://mywiki.wooledge.org/BashPitfalls
http://mywiki.wooledge.org/BashGuide
您可以使用 logger 命令将条目添加到日志文件: