如何调试 Upstart 脚本?

poo*_*lie 68 upstart debugging

出于某种原因,我在 apport upgrades 期间遇到错误,其原因是

% sudo service apport start
start: Job failed to start
Run Code Online (Sandbox Code Playgroud)

在 sysvinit 下,我可以通过运行 eg 来调试这类问题

sudo sh -x /etc/init.d/whatever start
Run Code Online (Sandbox Code Playgroud)

但这似乎并没有映射到 Upstart。我接下来应该尝试什么?

事实证明,有一种解决方法可以让安装继续进行。但我仍然对如何跟踪脚本的一般问题感兴趣。

Muh*_*ana 111

Upstart 将您的服务执行记录在一个同名的日志文件中/var/log/upstart/your-service-name.log。它应该有帮助。

  • 这在 16.04 中似乎不再成立,显然至少从 15.10 开始:该目录中的最后一个文件的日期正好在 15.10 发布之前。 (4认同)
  • 是的,看起来这包括作业的标准错误,所以如果我打开 `set -x` 它可能会出现在那里。 (2认同)

Mar*_*ell 31

以下所有信息(以及更多有用的 Upstart 帮助)均来自The Upstart Cookbook。第 18 节介绍调试。 http://upstart.ubuntu.com/cookbook/#debugging

在跟踪 Upstart 作业的“脚本”节的这种特定情况下,您应该在单词“脚本”的正下方添加以下几行:

exec 2>>/dev/.initramfs/myjob.log
set -x
Run Code Online (Sandbox Code Playgroud)

奇怪位置的原因是 /dev/.initramfs/ 在很早的引导中可用,在加载根文件系统之前,并在引导后继续可用。我猜用 apport,但是,您可能不需要使用该路径。不过,很高兴知道这个选项。

还应该注意的是,所有脚本都运行,set -e因此任何失败的命令都将完全退出脚本。这是有道理的,因为在以 root 身份运行脚本时应该非常小心。

我强烈建议为任何从事 Upstart 工作的人咨询上面链接的 Upstart Cookbook。