如何诊断 Upstart 错误?

如何诊断 Upstart 错误?

我在 /etc/init 中有一个 Upstart conf 文件,如果我像这样手动启动它,它可以正常启动:

sudo initctl start myconf

如果我不使用 sudo 命令来运行它,我会收到错误 name=(unset) 错误,这是由于用户权限造成的,但当 Upstart 启动时在系统启动时初始化作业时,这不应该是问题,对吧?(因为这些都是由 root 运行的)。

脚本内容如下:

start on runlevel [2345]
stop on runlevel [^2345]

exec /spatial/server_init.sh

...server_init.sh 运行基于 python 脚本的服务器。当我登录 shell 后立即检查脚本的状态时,它显示停止/等待。我还尝试使用“start on net-device-up”启动 conf 文件,但没有任何变化。有没有办法查看 Upstart 系统日志或类似的东西来帮助我调试问题。

谢谢

答案1

尝试:

/var/log/upstart/JOBNAME.log

您可能需要考虑在调试时将其转换为任务。

从空间开始

任务

执行/spatial/server_init.sh

然后从控制台:

initctl 发出空间启动
initctl 状态空间启动

答案2

好的,找到了一种方法,但它只在错误发生在脚本正在执行的程序中时才有效(当然,如果该程序返回错误消息),而不是 Upstart 本身,但这就是我在这种情况下所需要的。我所做的是将程序输出重定向到日志文件,如下所示:

exec /spatial/server_init.sh >> /spatial/ogc.log 2>&1

至于其他,我发现你可以增加 Upstart 的详细程度,所以如果我需要的话,我会从那里开始。

答案3

  1. 检查 upstart 目录是否存在:/var/log/upstart(如果不存在则创建目录)
  2. 通过以下方式检查你的 upstart 版本:初始化版本或者apt-cache 策略 upstart

    对于 v1.4 之前的所有 Upstart 版本,控制台的默认值为控制台无从 Upstart 1.4 开始,默认值为控制台日志

  3. 添加控制台日志进入你的新贵(在剧本阶段之前)
  4. 您的日志将位于:/var/log/upstart/“upstart-JOBNAME”.log

例子 :

控制台日志

脚本

exec /spatial/server_init.sh

结束脚本

控制台日志- 将标准输入连接到 /dev/null。标准输出和标准错误连接到伪终端的一端,这样,对于系统作业,任何作业输出都会自动记录到目录 /var/log/upstart/ 中的文件中,对于会话作业,则记录到 $XDG_CACHE_HOME/upstart/(或 $HOME/.cache/upstart/(如果未设置 $XDG_CACHE_HOME))中的文件中。

控制台无- 将作业的标准输入、标准输出和标准错误文件描述符连接到 /dev/null。

有关控制台的更多信息,请查看以下链接:

http://upstart.ubuntu.com/cookbook/#console-log

相关内容