我如何调试一个新贵的工作?

Cer*_*era 10 linux init ubuntu

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

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

expect daemon

exec /usr/bin/twistd -y /path/to/my/tac/file
Run Code Online (Sandbox Code Playgroud)

当我用 开始工作时sudo service collector start,它挂起。如果我ctrl-c并运行initctl list,我会看到:

collector start/killed, process 616
Run Code Online (Sandbox Code Playgroud)

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

我什至在没有'expect daemon'的情况下尝试了这个script,并且使用一个节简单地调用了一个单行bash脚本,但它仍然不起作用。我想我做错了什么。会是什么呢?

小智 14

您可以重定向stdoutstderr使用整个外壳的script编译(代替exec)结合exec >FILE 2>&1,就像这样:

script
    exec >/path/to/some_log_file 2>&1
    exec your_command_here
end script
Run Code Online (Sandbox Code Playgroud)

希望这能让您更好地了解正在发生的事情。我发现这对于捕获我的新贵脚本中的各种问题很有用。您可以直接通过管道传输命令的stdout/ stderr,但您会错过源自 shell 的错误(如语法错误)。

另一方面,如果service挂起,它甚至可能不会命中您的脚本,当然,在这种情况下,这些都无济于事。