我该如何调试一个 upstart 作业?

我该如何调试一个 upstart 作业?

我在 有以下工作/etc/init/collector

start on runlevel [2345]
stop on runlevel [!2345]

expect daemon

exec /usr/bin/twistd -y /path/to/my/tac/file

当我使用 启动作业时sudo service collector start,它会挂起。如果我ctrl-c运行initctl list,我会看到以下内容:

collector start/killed, process 616

我在 ps 中看不到twistd守护进程的实例,并且它应该提供的 HTTP 服务器不存在。

我甚至尝试不使用“expect daemon”,而是使用一个节简单地调用一行 bash 脚本script,但仍然不起作用。我想我做错了什么。可能是什么?

答案1

您可以使用pragma (而不是)与 结合来重定向整个 shell 的stdout和,如下所示:stderrscriptexecexec >FILE 2>&1

script
    exec >/path/to/some_log_file 2>&1
    exec your_command_here
end script

这应该能让你更好地了解发生了什么。我发现这对于发现我的 upstart 脚本中的各种问题很有用。你可以直接通过管道传输命令的stdout/ stderr,但您会错过源自 shell 的错误(例如语法错误)。

另一方面,如果service悬挂,则可能甚至没有达到你的脚本,在这种情况下,当然这一切都无济于事。

答案2

还有console log声明式的,定义如下:http://upstart.ubuntu.com/cookbook/#console-log

我对 upstart 了解不多,不知道它是否默认启用,但你可以在每个 upstart 作业中启用它,它会默认输出到/var/log/upstart/<job>.log

答案3

验证 upstart director 是否存在,并在脚本阶段之前添加控制台日志。(在 upstart 1.4 以上版本中这是默认设置)

控制台日志

脚本执行> / path / to / some_log_file 2>&1 exec your_command_here结束脚本

欲了解更多信息,请查看主题: https://askubuntu.com/questions/207143/how-to-diagnose-upstart-errors/932155#932155

相关内容