我在 有以下工作/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
和,如下所示:stderr
script
exec
exec >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